

# Babelfish for Aurora PostgreSQL の使用
<a name="Appendix.Babelfish.Functions"></a>

## 概要
<a name="Appendix.Babelfish.Functions.Overview"></a>

Babelfish for Aurora PostgreSQL を実行している Amazon RDS DB インスタンスでは、以下のプロシージャを使用してクエリのパフォーマンスを向上させることができます。
+ [sp\$1babelfish\$1volatility](sp_babelfish_volatility.md)
+ [sp\$1execute\$1postgresql](sp_execute_postgresql.md)

# sp\$1babelfish\$1volatility
<a name="sp_babelfish_volatility"></a>

PostgreSQL 関数の変動性により、オプティマイザはクエリをより適切に実行でき、特定の句の一部で使用すると、クエリのパフォーマンスに大きな影響を与えます。

## 構文
<a name="sp_babelfish_volatility-syntax"></a>

 

```
sp_babelfish_volatility ‘function_name’, ‘volatility’
```

## 引数
<a name="sp_babelfish_volatility-arguments"></a>

 *function\$1name (オプション)*   
この引数の値は、`schema_name.function_name` として 2 つの部分からなる名前で指定するか、`function_name` のみを指定することができます。`function_name` のみを指定した場合、スキーマ名は、現在のユーザーのデフォルトスキーマです。

 *変動性 (オプション)*   
PostgreSQL の変動性の有効な値は、`stable`、`volatile`、または `immutable` です。詳細については、「[https://www.postgresql.org/docs/current/xfunc-volatility.html](https://www.postgresql.org/docs/current/xfunc-volatility.html)」を参照してください。

**注記**  
`sp_babelfish_volatility` が複数の定義を持つ `function_name` で呼び出されると、エラーをスローします。

## 結果セット
<a name="sp_babelfish_volatility-return-type"></a>

パラメータが指定されていない場合、結果セットは `schemaname`、`functionname`、`volatility` 列に表示されます。

## 使用に関する注意事項
<a name="sp_babelfish_volatility-usage-notes"></a>

PostgreSQL 関数の変動性により、オプティマイザはクエリをより適切に実行でき、特定の句の一部で使用すると、クエリのパフォーマンスに大きな影響を与えます。

## 例
<a name="sp_babelfish_volatility-examples"></a>

次の例は、簡単な関数を作成する方法を示し、後でさまざまな方法を使用してこれらの関数で `sp_babelfish_volatility` を使用する方法を示します。

```
1> create function f1() returns int as begin return 0 end
2> go
```

```
1> create schema test_schema
2> go
```

```
1> create function test_schema.f1() returns int as begin return 0 end
2> go
```

次の例は、関数の変動性を示しています。

```
1> exec sp_babelfish_volatility
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
dbo         f1           volatile
test_schema f1           volatile
```

次の例は、関数の変動性を変更する方法を示しています。

```
1> exec sp_babelfish_volatility 'f1','stable'
2> go
1> exec sp_babelfish_volatility 'test_schema.f1','immutable'
2> go
```

function\$1name のみを指定すると、その関数のスキーマ名、関数名、および変動性が表示されます。次の例は、値を変更した後の関数の変動性を示しています。

```
1> exec sp_babelfish_volatility 'test_schema.f1'
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
test_schema f1           immutable
```

```
1> exec sp_babelfish_volatility 'f1'
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
dbo         f1           stable
```

引数を指定しなかった場合、現在のデータベースに存在する関数のリスト (スキーマ名、関数名、変動性) が表示されます。

```
1> exec sp_babelfish_volatility 
2> go
            
schemaname  functionname volatility
----------- ------------ ----------
dbo         f1           stable
test_schema f1           immutable
```

# sp\$1execute\$1postgresql
<a name="sp_execute_postgresql"></a>

T-SQL エンドポイントから PostgreSQL ステートメントを実行できます。これにより、T-SQL ポートを終了しなくてもこれらのステートメントを実行できるため、アプリケーションがシンプルになります。

## 構文
<a name="sp_execute_postgresql-syntax"></a>

 

```
sp_execute_postgresql [ @stmt = ] statement
```

## 引数
<a name="sp_execute_postgresql-arguments"></a>

 *[@stmt] ステートメント*   
この引数のデータ型は varchar です。この引数は PG ダイアレクトステートメントを受け付けます。

**注記**  
引数として渡せる PG ダイアレクトステートメントは 1 つだけです。それ以外の場合は次のエラーが発生します。

```
1>exec sp_execute_postgresql 'create extension pg_stat_statements; drop extension pg_stat_statements'
2>go
```

```
Msg 33557097, Level 16, State 1, Server BABELFISH, Line 1
expected 1 statement but got 2 statements after parsing
```

## 使用に関する注意事項
<a name="sp_execute_postgresql-statements"></a>

### CREATE EXTENSION
<a name="sp_execute_postgresql-statements-create"></a>

新しい拡張機能作成して現在のデータベースに読み込みます。

```
1>EXEC sp_execute_postgresql 'create extension [ IF NOT EXISTS ] <extension name> [ WITH ] [SCHEMA schema_name] [VERSION version]';
2>go
```

次の例は拡張機能の使用方法を示しています。

```
1>EXEC sp_execute_postgresql 'create extension pg_stat_statements with schema sys version "1.10"';
2>go
```

次のコマンドを使用して、拡張機能オブジェクトにアクセスします。

```
1>select * from pg_stat_statements;
2>go
```

**注記**  
 拡張機能の作成時にスキーマ名を明示的に指定しない場合、エクステンションはデフォルトでパブリックスキーマにインストールされます。拡張機能オブジェクトにアクセスするには、以下のようにスキーマ修飾子を指定する必要があります。

```
1>select * from [public].pg_stat_statements;
2>go
```

**サポートされている拡張機能**

Aurora PostgreSQL で利用できる以下の拡張機能は、Babelfish で動作します。
+ `pg_stat_statements`
+ `tds_fdw`
+ `fuzzystrmatch`

**制約事項**
+ 拡張機能をインストールするには、ユーザーが T-SQL では sysadmin ロールを、postgres では rds\$1superuser ロールを持っている必要があります。
+ 拡張機能は、ユーザーが作成したスキーマにはインストールできません。また、master、tempdb、msdb データベースの dbo スキーマやゲストスキーマにもインストールできません。
+ CASCADE オプションはサポートされていません。

## ALTER EXTENSION
<a name="sp_execute_postgresql-alter"></a>

ALTER 拡張機能を使用して新しい拡張機能のバージョンにアップグレードできます。

```
1>EXEC sp_execute_postgresql 'alter extension <extension name> UPDATE TO <new_version>';
2>go
```

**制約事項**
+ 拡張機能のバージョンは ALTER Extension 拡張機能を使用してのみアップグレードできます。他のオペレーションはサポートされていません。

## DROP EXTENSION
<a name="sp_execute_postgresql-drop"></a>

指定した拡張機能を削除します。`if exists` または `restrict` オプションを使用して拡張機能を削除することもできます。

```
1>EXEC sp_execute_postgresql 'drop extension <extension name>';
2>go
```

**制約事項**
+ CASCADE オプションはサポートされていません。