

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# IBM DB2 for Linux、UNIX、および Windows から Amazon Relational Database Service for PostgreSQL または Amazon Aurora PostgreSQL 互換エディションへの移行
<a name="CHAP_Source.DB2LUW.ToPostgreSQL"></a>

IBM Db2 LUW を PostgreSQL に移行すると、 は Db2 LUW で使用されるさまざまなトリガーステートメントを変換 AWS SCT できます。例えば、次のようなトリガーステートメントです。
+ **トリガーイベント** - INSERT、DELETE、および UPDATE トリガーイベントは、イベントがサブジェクトテーブルまたはサブジェクトビューに適用されるたびに、トリガーされたアクションの実行を指定します。INSERT、DELETE、UPDATE イベントの任意の組み合わせを指定できますが、各イベントは 1 回のみ指定できます。 は単一および複数のトリガーイベント AWS SCT をサポートします。イベントについては、PostgreSQL が実質的に同じ機能を備えています。
+ **イベント OF COLUMN** - ベーステーブルからの列名を指定できます。このトリガーは、列名リストで列の更新が識別された場合にのみアクティブ化されます。PostgreSQL にも同じ機能があります。
+ **ステートメントトリガー** – トリガーされるアクションがステートメント全体で 1 回のみ適用されるように指定します。このタイプのトリガー単位を、BEFORE トリガーまたは INSTEAD OF トリガーに指定することはできません。指定した場合、対象の行がなくても、UPDATE または DELETE トリガーがアクティブ化されます。PostgreSQL にもこの機能があり、ステートメントトリガーのトリガー宣言は PostgreSQL と Db2 LUW で同じです。
+ **Referencing 句** - 移行テーブルの移行変数とテーブル名の相関を指定します。相関名は、SQL オペレーションがトリガーされることで影響を受ける一連の行のうちの特定の行を識別します。テーブル名は、営業を受ける一連の行全体を識別します。SQL オペレーションのトリガーにより影響を受ける各行は、列を特定の相関名で分類することで、トリガーされたアクションで利用できます。PostgreSQL ではこの機能はサポートされていません。NEW または OLD 相関名のみが使用されます。
+ **INSTEAD OF トリガー** – AWS SCT は、これらをサポートしています。

## Db2 LUW パーティションテーブルから PostgreSQL バージョン 10 パーティションテーブルへの変換
<a name="CHAP_Source.DB2LUW.ToPostgreSQL.PartitionedTables"></a>

AWS SCT は、Db2 LUW テーブルを PostgreSQL 10 のパーティションテーブルに変換できます。Db2 LUW パーティションテーブルを PostgreSQL に変換する場合はいくつかの制限があります。
+ Db2 LUW では null 値が許容される列をもつパーティションテーブルを作成したり、パーティションに null 値を保存するように指定できます。しかし、PostgreSQL は RANGE パーティションの NULL 値をサポートしていません。
+ Db2 LUW は INCLUSIVE または EXCLUSIVE 句を使用して範囲境界値を設定できます。PostgreSQL は開始境界で INCLUSIVE のみ、終了境界で EXCLUSIVE のみをサポートします。変換されたパーティション名の形式は <original\$1table\$1name>\$1<original\$1partition\$1name> です。
+ Db2 LUW のパーティションテーブルでプライマリキーや固有キーを作成できます。PostgreSQL では、プライマリキーや固有キーをパーティションごとに直接作成する必要があります。プライマリキーや固有キーの制約を親テーブルから削除する必要があります。変換されたキー名の形式は <original\$1key\$1name>\$1<original\$1partition \$1name> です。
+ Db2 LUW ではパーティションテーブルから、またはテーブルに、外部キー制約を作成できます。しかし、PostgreSQL はパーティションテーブルで外部キーの参照をサポートしていません。また、PostgreSQL はパーティションテーブルから別のテーブルへの外部キーの参照をサポートしていません。
+ Db2 LUW ではパーティションテーブルにインデックスを作成できます。しかし PostgreSQL では、インデックスをパーティションごとに直接作成する必要があります。親テーブルからインデックスを削除する必要があります。変換されたインデックス名の形式は <original\$1index\$1name>\$1<original\$1partition\$1name> です。
+ 行トリガーはパーティションテーブルではなく、個別のパーティションで定義する必要があります。親テーブルからトリガーを削除する必要があります。変換されたトリガー名の形式は <original\$1trigger\$1name>\$1<original\$1partition\$1name> です。

## PostgreSQL をターゲットとする場合の権限
<a name="CHAP_Source.DB2LUW.ToPostgreSQL.ConfigureTarget"></a>

PostgreSQL をターゲットとして使用するには、 `CREATE ON DATABASE` 権限 AWS SCT が必要です。ターゲット PostgreSQL データベースごとにこの権限を必ず付与してください。

変換されたパブリックシノニムを使用するには、データベースのデフォルト検索パスを `"$user", public_synonyms, public` に変更します。

次のコード例を使用してデータベースユーザーを作成し、権限を付与できます。

```
CREATE ROLE user_name LOGIN PASSWORD 'your_password';
GRANT CREATE ON DATABASE db_name TO user_name;
ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;
```

前述の例では、[*user\$1name*] をお客様の設定のユーザー名に置き換えます。[*db\$1name*] をターゲットデータベースの名前に置き換えます。最後に、[*your\$1password*] を安全なパスワードに置き換えます。

PostgreSQL では、スキーマの所有者または `superuser` だけがスキーマを削除できます。スキーマ所有者が一部のオブジェクトを所有していない場合でも、スキーマとスキーマに含まれるすべてのオブジェクトを削除できます。

異なるユーザーを使用して異なるスキーマを変換し、ターゲットデータベースに適用すると、 AWS SCT がスキーマを削除できない場合にエラーメッセージが表示されることがあります。このエラーメッセージを回避するには、`superuser` ロールを使用してください。