翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
PostgreSQL データベースをソースとして使用する AWS DMS
を使用して、1 つまたは複数の PostgreSQL データベースからデータを移行できます AWS DMS。PostgreSQL データベースをソースとして使用すると、データを別の PostgreSQL データベースまたはサポートされている他のデータベースのいずれかに移行できます。
がソースとして AWS DMS サポートする PostgreSQL のバージョンについては、「」を参照してくださいのソース AWS DMS。
AWS DMS は、次のタイプのデータベースの PostgreSQL をサポートします。
-
オンプレミスのデータベース
-
Amazon EC2インスタンス上のデータベース
-
Amazon RDS DB インスタンス上のデータベース
-
Amazon Aurora Postgre SQL互換エディションに基づく DB インスタンス上のデータベース
-
Amazon Aurora Postgre SQL互換サーバーレスエディションに基づく DB インスタンス上のデータベース
注記
DMS は、Amazon Aurora Postgre SQL— サーバーレス V1 をフルロードのソースとしてのみサポートします。ただし、Amazon Aurora Postgre SQL— Serverless V2 は、フルロード、フルロード + CDC、およびタスクCDCのみのソースとして使用できます。
PostgreSQL ソースバージョン |
AWS DMS 使用するバージョン |
---|---|
9.x、10.x、11.x、12.x |
使用可能な AWS DMS バージョンを使用します。 |
13.x |
AWS DMS バージョン 3.4.3 以降を使用します。 |
14.x |
AWS DMS バージョン 3.4.7 以降を使用します。 |
15.x |
AWS DMS バージョン 3.5.1 以降を使用します。 |
16.x |
AWS DMS バージョン 3.5.3 以降を使用します。 |
Secure Socket Layers (SSL) を使用して、PostgreSQL エンドポイントとレプリケーションインスタンス間の接続を暗号化できます。PostgreSQL エンドポイントSSLで を使用する方法の詳細については、「」を参照してくださいでの SSL の使用 AWS Database Migration Service。
PostgreSQL をソースとして使用する際の追加のセキュリティ要件として、指定されたユーザーアカウントは PostgreSQL データベースに登録されたユーザーである必要があります。
PostgreSQL データベースを AWS DMS ソースエンドポイントとして設定するには、以下を実行します。
-
PostgreSQL ソースデータベース AWS DMS へのアクセスを提供する適切なアクセス許可を持つ PostgreSQL ユーザーを作成します。
注記
-
PostgreSQL ソースデータベースがセルフマネージド型の場合は、詳細については、でのソースとしてのセルフマネージド PostgreSQL データベースの使用 AWS DMS「」を参照してください。
-
PostgreSQL ソースデータベースが Amazon によって管理されている場合はRDS、詳細については、AWSマネージド PostgreSQL データベースをDMSソースとして使用する「」を参照してください。
-
-
選択した PostgreSQL データベース設定に準拠する PostgreSQL ソースエンドポイントを作成します。
-
テーブルを移行するタスクまたはタスクのセットを作成します。
タスクを作成するには full-load-only、それ以上のエンドポイント設定は必要ありません。
変更データキャプチャのタスク ( CDCのみまたはフルロードおよびCDCタスク) を作成する前に、 セルフマネージド型 PostgreSQL データベースCDCを AWS DMS ソースとして使用できるようにする または を参照してくださいCDC で AWSマネージド PostgreSQL DB インスタンスで を有効にする AWS DMS。
トピック
- でのソースとしてのセルフマネージド PostgreSQL データベースの使用 AWS DMS
- AWSマネージド PostgreSQL データベースをDMSソースとして使用する
- 論理レプリケーションを使用した変更データキャプチャ (CDC) の有効化
- PostgreSQL ソースのCDCロードをセットアップするためのネイティブCDCスタートポイントの使用
- を使用した PostgreSQL から PostgreSQL への移行 AWS DMS
- を使用して Babelfish for Amazon Aurora PostgreSQL から移行する AWS DMS
- PostgreSQL ソースデータベースからの AWS DMS アーティファクトの削除
- PostgreSQL データベースをDMSソースとして使用する場合の追加設定
- MapBooleanAsBoolean PostgreSQL エンドポイント設定の使用
- PostgreSQL をDMSソースとして使用する場合のエンドポイント設定と追加接続属性 (ECAs)
- PostgreSQL データベースをDMSソースとして使用する際の制限
- Postgre のソースデータ型SQL
でのソースとしてのセルフマネージド PostgreSQL データベースの使用 AWS DMS
セルフマネージド型の PostgreSQL データベースをソースとして使用する場合、データを別の PostgreSQL データベース、または でサポートされている他のターゲットデータベースのいずれかに移行できます AWS DMS。データベースソースは、オンプレミスのデータベースでも、Amazon EC2インスタンスで実行されているセルフマネージドエンジンでもかまいません。DB インスタンスは、フルロードタスクと変更データキャプチャ (CDC) タスクの両方に使用できます。
セルフマネージド PostgreSQL データベースを AWS DMS ソースとして使用する前提条件
セルフマネージド型の PostgreSQL ソースデータベースからデータを移行する前に、以下を実行します。
-
バージョン 9.4.x 以降の PostgreSQL データベースを使用していることを確認してください。
-
フルロードプラスCDCタスクまたは CDCのみのタスクの場合、PostgreSQL ソースデータベースに指定されたユーザーアカウントのスーパーユーザーアクセス許可を付与します。ユーザー アカウントはソース内のレプリケーション固有機能にアクセスするには、スーパーユーザー許可が必要です。フルロードのみのタスクの場合、ユーザーアカウントにはそれらを移行するためのテーブルに対するSELECTアクセス許可が必要です。
-
AWS DMS レプリケーションサーバーの IP アドレスを設定
pg_hba.conf
ファイルに追加し、レプリケーションとソケット接続を有効にします。以下に例を示します。# Replication Instance host all all 12.3.4.56/00 md5 # Allow replication connections from localhost, by a user with the # replication privilege. host replication dms 12.3.4.56/00 md5
Postgre
pg_hba.conf
の設定ファイルはSQL、クライアント認証を制御します。(HBA はホストベースの認証を表します)。ファイルは従来、データベースクラスターのデータディレクトリに保存されています。 -
を使用して論理レプリケーションのソースとしてデータベースを設定する場合は、 AWS DMS 「」を参照してください。 セルフマネージド型 PostgreSQL データベースCDCを AWS DMS ソースとして使用できるようにする
注記
一部の AWS DMS トランザクションは、DMSエンジンが再度使用する前にしばらくアイドル状態になっています。idle_in_transaction_session_timeout
PostgreSQL バージョン 9.6 以降の パラメータを使用すると、アイドル状態のトランザクションがタイムアウトして失敗する可能性があります。 AWS DMSを使用する際、アイドル状態のトランザクションを終了しないでください。
セルフマネージド型 PostgreSQL データベースCDCを AWS DMS ソースとして使用できるようにする
AWS DMS は、論理レプリケーションを使用した変更データキャプチャ (CDC) をサポートします。セルフマネージド PostgreSQL ソースデータベースの論理レプリケーションを有効にするには、postgresql.conf
設定ファイルに次のパラメータと値を設定します。
-
wal_level = logical
を設定します。 -
max_replication_slots
を 1 より大きい値に設定します。max_replication_slots
値は、実行するタスクの数に従って設定してください。たとえば、5 つのタスクを実行するには、少なくとも 5 つのスロットを設定する必要があります。スロットは、タスクが開始するとすぐに自動的に開き、タスクが実行されなくなった場合でも開いたままです。開いているスロットは手動で削除してください。がスロットDMSを作成した場合、タスクが削除されると、 はレプリケーションスロットDMSを自動的にドロップします。 -
max_wal_senders
を 1 より大きい値に設定します。max_wal_senders
パラメータは、実行可能な同時タスクの数を設定します。 -
wal_sender_timeout
パラメータは、指定されたミリ秒数が過ぎても非アクティブなレプリケーション接続を終了します。オンプレミスの PostgreSQL データベースのデフォルトは 60,000 ミリ秒 (60 秒) です。値を 0 (ゼロ) に設定すると、タイムアウトメカニズムが無効になり、 の有効な設定になりますDMS。をゼロ以外の値
wal_sender_timeout
に設定すると、 のDMSタスクには最低 10,000 ミリ秒 (10 秒) CDCが必要になり、値が 10,000 未満の場合に失敗します。DMS レプリケーションインスタンスのマルチ AZ フェイルオーバー中に遅延が発生しないように、値は 5 分未満にしておきます。
一部のパラメータは静的であり、サーバースタート時にのみ設定できます。設定ファイル (セルフマネージドデータベースの場合) または DB パラメータグループ (PostgreSQL データベースRDS用 の場合) のエントリに対する変更は、サーバーが再起動されるまで無視されます。詳細については、PostgreSQL ドキュメント
の有効化の詳細についてはCDC、「」を参照してください論理レプリケーションを使用した変更データキャプチャ (CDC) の有効化。
AWSマネージド PostgreSQL データベースをDMSソースとして使用する
AWSマネージド PostgreSQL DB インスタンスを のソースとして使用できます AWS DMS。 AWSマネージド PostgreSQL ソースを使用して、フルロードタスクと変更データキャプチャ (CDC) タスクの両方を実行できます。
AWSマネージド PostgreSQL データベースをDMSソースとして使用するための前提条件
AWSマネージド PostgreSQL ソースデータベースからデータを移行する前に、以下を実行します。
-
の PostgreSQL ソースエンドポイントの AWS ユーザーアカウントとして、PostgreSQL DB インスタンスに必要な最小限のアクセス許可を持つユーザーアカウントを使用することをお勧めします AWS DMS。管理アカウントの使用はお勧めしません。このアカウントには
rds_superuser
ロールとrds_replication
ロールが必要です。rds_replication
ロールは、論理スロットを管理し、論理スロットを使用してデータをストリーミングするアクセス権許可付与します。使用するアカウントの管理ユーザーアカウントで複数のオブジェクトを作成します。その作成についての詳細は、「マスターユーザーアカウントを使用せずに Amazon RDS for PostgreSQL データベースを移行する」をご参照ください。
-
ソースデータベースが仮想プライベートクラウド (VPC) にある場合は、データベースが存在する DB インスタンスへのアクセスを提供するVPCセキュリティグループを選択します。これは、DMSレプリケーションインスタンスがソース DB インスタンスに正常に接続するために必要です。データベースとDMSレプリケーションインスタンスが同じ にある場合はVPC、適切なセキュリティグループを独自のインバウンドルールに追加します。
注記
一部の AWS DMS トランザクションは、DMSエンジンが再度使用する前にしばらくアイドル状態になっています。idle_in_transaction_session_timeout
PostgreSQL バージョン 9.6 以降の パラメータを使用すると、アイドル状態のトランザクションがタイムアウトして失敗する可能性があります。 AWS DMSを使用する際、アイドル状態のトランザクションを終了しないでください。
CDC で AWSマネージド PostgreSQL DB インスタンスで を有効にする AWS DMS
AWS DMS DB インスタンスが論理レプリケーションを使用するように設定されている場合、 は Amazon RDS PostgreSQL データベースCDCで をサポートします。次の表は、 AWSが管理する各 PostgreSQL バージョンの論理レプリケーションの互換性をまとめたものです。
RDS PostgreSQL リードレプリカを CDC (進行中のレプリケーション) に使用することはできません。
PostgreSQL バージョン |
AWS DMS フルロードサポート |
AWS DMS CDC サポート |
---|---|---|
PostgreSQL 10.5 互換 (以下) の Aurora PostgreSQL バージョン 2.1 |
可能 |
不可 |
PostgreSQL 10.6 互換 (以降) の Aurora PostgreSQL バージョン 2.2 |
あり |
可能 |
RDS PostgreSQL 10.21 互換 (またはそれ以上) の PostgreSQL の場合 |
あり |
可能 |
RDS PostgreSQL DB インスタンスの論理レプリケーションを有効にするには
-
PostgreSQL DB インスタンスの AWS マスターユーザーアカウントを PostgreSQL ソースエンドポイントのユーザーアカウントとして使用します。マスターユーザーアカウントには、 のセットアップに必要なロールがありますCDC。
マスター ユーザーアカウント以外のアカウントを使用する場合は、使用するアカウントのマスター ユーザーアカウントから複数のオブジェクトを作成する必要があります。詳細については、「マスターユーザーアカウントを使用せずに Amazon RDS for PostgreSQL データベースを移行する」を参照してください。
-
DB
rds.logical_replication
パラメータグループの CLUSTERパラメータを 1 に設定します。この静的パラメータを有効にするには、DB インスタンスを再起動する必要があります。このパラメータを適用する一環として、 AWS DMS はwal_level
、max_wal_senders
、max_replication_slots
、max_connections
の各パラメータを設定します。これらのパラメータの変更により、書き込み先行ログ (WAL) の生成が増加する可能性があるため、論理レプリケーションスロットを使用するrds.logical_replication
場合にのみ が設定されます。 -
wal_sender_timeout
パラメータは、指定されたミリ秒数が過ぎても非アクティブなレプリケーション接続を終了します。 AWSマネージド PostgreSQL データベースのデフォルトは 30,000 ミリ秒 (30 秒) です。値を 0 (ゼロ) に設定すると、タイムアウトメカニズムが無効になり、 の有効な設定になりますDMS。をゼロ以外の値
wal_sender_timeout
に設定すると、 のDMSタスクには最低 10,000 ミリ秒 (10 秒) CDCが必要になり、値が 0 から 10,000 の間であれば失敗します。DMS レプリケーションインスタンスのマルチ AZ フェイルオーバー中に遅延が発生しないように、値は 5 分未満にしておきます。 -
DB クラスター パラメータグループで
max_worker_processes
パラメータの値が、max_logical_replication_workers
、autovacuum_max_workers
、max_parallel_workers
の合計値以上となるようにしてください。多数のバックグラウンド ワーカー プロセスが、スモールインスタンスではアプリケーション ワークロードに影響を与える可能性があります。したがって、max_worker_processes
をデフォルト値より大きく設定した場合は、データベースのパフォーマンスをモニタリングしてください。 -
でソースとして Aurora PostgreSQL を使用する場合はCDC、
synchronous_commit
を に設定しますON
。
マスターユーザーアカウントを使用せずに Amazon RDS for PostgreSQL データベースを移行する
場合によっては、ソースとして使用している Amazon RDS PostgreSQL DB インスタンスにマスターユーザーアカウントを使用しないことがあります。このような場合は、データ定義言語 (DDL) イベントをキャプチャするために複数のオブジェクトを作成します。マスターアカウント以外のアカウントでこれらのオブジェクトを作成し、マスターユーザーアカウントでトリガーを作成します。
注記
ソースエンドポイントで CaptureDdls
エンドポイント設定を false
に設定すると、ソースデータベース上で次のテーブルおよびトリガーを作成する必要はありません。
これらのオブジェクトを作成するには、以下の手順を実行します。
オブジェクトを作成するには
-
オブジェクトが作成されるスキーマを選択します。デフォルトのスキーマは
public
です。スキーマが存在し、
アカウントからアクセス可能であることを確認します。OtherThanMaster
-
マスターアカウント以外のユーザーアカウント、ここで
アカウントを使用して PostgreSQL DB インスタンスにログインします。OtherThanMaster
-
以下のコマンドを実行し、以下のコード内の
を使用するスキーマの名前に置き換えてobjects_schema
awsdms_ddl_audit
テーブルを作成します。CREATE TABLE
objects_schema
.awsdms_ddl_audit ( c_key bigserial primary key, c_time timestamp, -- Informational c_user varchar(64), -- Informational: current_user c_txn varchar(16), -- Informational: current transaction c_tag varchar(24), -- Either 'CREATE TABLE' or 'ALTER TABLE' or 'DROP TABLE' c_oid integer, -- For future use - TG_OBJECTID c_name varchar(64), -- For future use - TG_OBJECTNAME c_schema varchar(64), -- For future use - TG_SCHEMANAME. For now - holds current_schema c_ddlqry text -- The DDL query associated with the current DDL event ); -
以下のコマンドを実行して
awsdms_intercept_ddl
関数を作成します。コード内の
は、使用するスキーマの名前に置き換えてください。objects_schema
CREATE OR REPLACE FUNCTION
objects_schema
.awsdms_intercept_ddl() RETURNS event_trigger LANGUAGE plpgsql SECURITY DEFINER AS $$ declare _qry text; BEGIN if (tg_tag='CREATE TABLE' or tg_tag='ALTER TABLE' or tg_tag='DROP TABLE' or tg_tag = 'CREATE TABLE AS') then SELECT current_query() into _qry; insert intoobjects_schema
.awsdms_ddl_audit values ( default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry ); delete fromobjects_schema
.awsdms_ddl_audit; end if; END; $$; -
アカウントからログアウトし、OtherThanMaster
rds_superuser
ロールが割り当てられたアカウントを使用してログインします。 -
以下のコマンドを実行してイベントトリガー
awsdms_intercept_ddl
を作成します。CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE
objects_schema
.awsdms_intercept_ddl(); -
これらのイベントにアクセスするすべてのユーザーとロールに必要なDDLアクセス許可があることを確認してください。例:
grant all on public.awsdms_ddl_audit to public; grant all on public.awsdms_ddl_audit_c_key_seq to public;
前の手順を完了したら、
アカウントを使用して AWS DMS
ソースエンドポイントを作成できます。OtherThanMaster
注記
これらのイベントは、CREATE TABLE
、ALTER
TABLE
、および DROP TABLE
ステートメントによってトリガーされます。
論理レプリケーションを使用した変更データキャプチャ (CDC) の有効化
Postgre SQLのネイティブ論理レプリケーション機能を使用して、PostgreSQL ソースのデータベース移行中に変更データキャプチャ (CDC) を有効にできます。この機能は、セルフマネージド型の PostgreSQL と Amazon RDS for PostgreSQL SQL DB インスタンスで使用できます。このアプローチによりダウンタイムが短縮され、ターゲットデータベースがソース PostgreSQL データベースと同期するようになります。
AWS DMS はCDC、プライマリキーを持つ PostgreSQL テーブルをサポートします。テーブルにプライマリキーがない場合、先行書き込みログ (WAL) にはデータベース行の前のイメージは含まれません。この場合、 DMS はテーブルを更新できません。ここでは、追加の構成設定を使用し、回避策としてテーブルレプリカ アイデンティティを使用できます。ただし、この方法では追加のログが生成される可能性があります。注意深いテストの後にのみ、回避策としてテーブルレプリカ アイデンティティ を使用することをお勧めします。詳細については、「PostgreSQL データベースをDMSソースとして使用する場合の追加設定」を参照してください。
注記
REPLICA IDENTITY FULL は論理デコードプラグインでサポートされていますが、pglogical プラグインではサポートされていません。詳細については、「pglogical ドキュメント
フルロードCDCおよび タスクCDCのみの場合、 は論理レプリケーションスロット AWS DMS を使用して、WALログがデコードされるまでレプリケーション用のログを保持します。フルロードおよびCDCタスクまたはCDCタスクの再起動 (再開ではない) 時に、レプリケーションスロットが再作成されます。
注記
論理デコードの場合、 DMSは test_decoding または pglogical プラグインを使用します。pglogical プラグインがソース PostgreSQL データベースで利用可能な場合、 は pglogical を使用してレプリケーションスロットDMSを作成します。それ以外の場合は test_decoding プラグインが使用されます。test_decoding プラグインの詳細については、「PostgreSQL ドキュメント
データベースパラメータmax_slot_wal_keep_size
がデフォルト値以外の値に設定され、レプリケーションスロットrestart_lsn
の がこのサイズLSNよりも大きく現在の を下回った場合、必要なWALファイルの削除によりDMSタスクは失敗します。
pgglogical プラグインの設定
PostgreSQL 拡張機能として実装された pglogical プラグインは、選択的データレプリケーションのための論理レプリケーションシステムおよびモデルです。次の表は、pglogical プラグインをサポートするソース PostgreSQL データベースバージョンを示しています。
PostgreSQL ソース |
plogical のサポート |
---|---|
セルフマネージド PostgreSQL 9.4 以降 |
可能 |
Amazon RDS PostgreSQL 9.5 以下 |
不可 |
Amazon RDS PostgreSQL 9.6 以降 |
可能 |
Aurora PostgreSQL 1.x から 2.5.x まで |
不可 |
Aurora PostgreSQL 2.6.x 以降 |
可能 |
Aurora PostgreSQL 3.3.x 以降 |
可能 |
で使用するように pglogical を設定する前に AWS DMS、まず PostgreSQL ソースデータベースで変更データキャプチャ (CDC) の論理レプリケーションを有効にします。
-
セルフマネージド PostgreSQL ソースデータベースCDCで の論理レプリケーションを有効にする方法については、「」を参照してください。 セルフマネージド型 PostgreSQL データベースCDCを AWS DMS ソースとして使用できるようにする
-
AWSマネージド PostgreSQL ソースデータベースCDCで の論理レプリケーションを有効にする方法については、「」を参照してくださいCDC で AWSマネージド PostgreSQL DB インスタンスで を有効にする AWS DMS。
PostgreSQL ソースデータベースで論理レプリケーションを有効にしたら、次のステップを使用して、 で使用する pglogical を設定しますDMS。
を使用して PostgreSQL ソースデータベースでの論理レプリケーションに pglogical プラグインを使用するには AWS DMS
-
ソース PostgreSQL データベースに pglogical 拡張機能を作成します。
-
正しいパラメータを設定します:
-
セルフマネージド PostgreSQL データベースの場合は、データベースパラメータ を設定します
shared_preload_libraries= 'pglogical'
。 -
Amazon RDSおよび Amazon Aurora PostgreSQL SQL-Compatible Edition データベースの Postgre では、同じパラメータグループ
pglogical
で RDS パラメータshared_preload_libraries
を に設定します。
-
-
PostgreSQL ソースデータベースを再起動します。
-
PostgreSQL データベースで、 コマンドを実行します。
create extension pglogical;
-
-
pglogical が正常にインストールされたことを確認するには、次のコマンドを実行します:
select * FROM pg_catalog.pg_extension
PostgreSQL ソースデータベースエンドポイントの変更データキャプチャを実行する AWS DMS タスクを作成できるようになりました。
注記
PostgreSQL ソースデータベースで pglogical を有効にしない場合、 はデフォルトでtest_decoding
プラグイン AWS DMS を使用します。pglogical が論理デコードで有効になっている場合、 はデフォルトで pglogical AWS DMS を使用します。ただし、代わりに test_decoding
のプラグインを使用する追加の接続属性 PluginName
を設定することもできます。
PostgreSQL ソースのCDCロードをセットアップするためのネイティブCDCスタートポイントの使用
PostgreSQL をソースとしてネイティブCDCスタートポイントを有効にするには、エンドポイントの作成時に、slotName
追加の接続属性を既存の論理レプリケーションスロットの名前に設定します。この論理レプリケーションスロットは、エンドポイントの作成時点からの継続的な変更を保持するため、以前の時点からのレプリケーションをサポートします。
PostgreSQL は、論理レプリケーションスロットから変更を AWS DMS 正常に読み取った後にのみ破棄されるWALファイルにデータベースの変更を書き込みます。論理レプリケーションスロットを使用すると、ログに記録された変更がレプリケーションエンジンによって消費される前に削除されないように保護できます。
ただし、変更率と消費率によっては、論理レプリケーションスロットに保持されている変更により、ディスク使用率が高くなることがあります。論理レプリケーションスロットを使用する場合は、ソース PostgreSQL インスタンスにスペース使用量アラームを設定することをお勧めします。追加の slotName
接続属性の設定についての詳細は、「PostgreSQL をDMSソースとして使用する場合のエンドポイント設定と追加接続属性 (ECAs)」をご参照ください。
次の手順では、このアプローチについて詳しく説明します。
ネイティブCDCスタートポイントを使用して PostgreSQL ソースエンドポイントのCDCロードを設定するには
-
開始点として使用する以前のレプリケーションタスク (親タスク) によって使用されていた論理レプリケーションスロットを特定します。次に、ソースデータベースの
pg_replication_slots
ビューにクエリを実行して、このスロットにアクティブな接続がないことを確認します。その場合は、先に進む前に解決して終了します。次のステップでは、論理レプリケーションスロットが
abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef
であると仮定します。 -
次の追加接続属性設定を含む新しいソースエンドポイントを作成します。
slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
-
コンソール AWS CLI または を使用して、新しい CDCのみのタスクを作成します AWS DMS API。例えば、 を使用して次の
create-replication-task
コマンドCLIを実行できます。aws dms create-replication-task --replication-task-identifier postgresql-slot-name-test --source-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ABCD1EFGHIJK2LMNOPQRST3UV4 --target-endpoint-arn arn:aws:dms:us-west-2:012345678901:endpoint:ZYX9WVUTSRQONM8LKJIHGF7ED6 --replication-instance-arn arn:aws:dms:us-west-2:012345678901:rep:AAAAAAAAAAA5BB4CCC3DDDD2EE --migration-type cdc --table-mappings "file://mappings.json" --cdc-start-position "4AF/B00000D0" --replication-task-settings "file://task-pg.json"
前述のコマンドでは、次のオプションが設定されています。
-
source-endpoint-arn
は、ステップ 2 で作成した新しい値に設定されます。 -
replication-instance-arn
オプションは、ステップ 1 の親タスクと同じ値に設定されます。 -
table-mappings
およびreplication-task-settings
オプションは、ステップ 1 の親タスクと同じ値に設定されます。 -
cdc-start-position
はオプションはスタート位置の値に設定されます。この開始位置を調べるには、ソースデータベースのpg_replication_slots
ビューにクエリを実行するか、ステップ 1 で親タスクのコンソール詳細を表示します。詳細については、「CDC ネイティブ開始点の決定」を参照してください。
AWS DMS コンソールを使用して新しい CDCのみのタスクを作成するときにカスタムCDCスタートモードを有効にするには、以下を実行します。
タスク設定セクションで、CDCソーストランザクションの開始モード で、カスタムCDC開始モードを有効にする を選択します。
ソーストランザクションのカスタムCDC開始ポイント で、ログシーケンス番号 を指定する を選択します。システム変更番号を指定するか、[復旧チェックポイントを指定する] を選択して、復旧チェックポイントを指定する。
このCDCタスクを実行すると、指定された論理レプリケーションスロットが存在しない場合、 はエラーを AWS DMS レイズします。また、
cdc-start-position
の有効な設定を使用してタスクが作成されていない場合、エラーを返します。 -
pglogical プラグインでネイティブのCDCスタートポイントを使用し、新しいレプリケーションスロットを使用する場合は、CDCタスクを作成する前に以下のセットアップステップを完了します。
別のDMSタスクの一部として以前に作成されていない新しいレプリケーションスロットを使用するには
-
次に示すように、レプリケーション スロットを作成します:
SELECT * FROM pg_create_logical_replication_slot('
replication_slot_name
', 'pglogical'); -
データベースがレプリケーションスロットを作成した後、次のとおりスロットの restart_lsn と confirmed_flush_lsn の値を取得してメモしておきます。
select * from pg_replication_slots where slot_name like 'replication_slot_name';
レプリケーションスロットの後に作成されたCDCタスクのネイティブCDC開始位置は、Confirmed_flush_lsn 値より古くすることはできません。
restart_lsn と confirmed_flush_lsn の値の詳細については、「pg_replication_slots
」を参照してください。 -
pglogical ノードを作成します。
SELECT pglogical.create_node(node_name := '
node_name
', dsn := 'your_dsn_name
'); -
pglogical.create_replication_set
関数を使用して 2 つのレプリケーションセットを作成します。最初のレプリケーションセットは、プライマリキーを持つテーブルの更新と削除を追跡します。2 番目のレプリケーションセットは挿入のみを追跡し、最初のレプリケーションセットと同じ名前にプレフィックス「i」が追加されています。SELECT pglogical.create_replication_set('
replication_slot_name
', false, true, true, false); SELECT pglogical.create_replication_set('ireplication_slot_name
', true, false, false, true); -
レプリケーション集合にテーブルを追加します。
SELECT pglogical.replication_set_add_table('
replication_slot_name
', 'schemaname.tablename', true); SELECT pglogical.replication_set_add_table('ireplication_slot_name
', 'schemaname.tablename', true); -
ソースエンドポイントを作成するときに、追加の接続属性 (ECA) を設定します。
PluginName=PGLOGICAL;slotName=
slot_name
;
新しいレプリケーションスロットを使用して、PostgreSQL ネイティブスタートポイントを持つCDC唯一のタスクを作成できるようになりました。pglogical プラグインの詳細については、「pglogical 3.7 ドキュメント
を使用した PostgreSQL から PostgreSQL への移行 AWS DMS
PostgreSQL 以外のデータベースエンジンから PostgreSQL データベースに移行する場合、 AWS DMS はほとんど常に最適な移行ツールです。ただし、PostgreSQL データベースから PostgreSQL データベースに移行する場合、PostgreSQL ツールがより効果的になる可能性があります。
PostgreSQL ネイティブツールを使用してデータを移行する
PostgreSQL データベース移行ツールは、pg_dump
以下の条件下で などの を使用することをお勧めします。
-
同種移行があり、ソース PostgreSQL データベースからターゲット PostgreSQL データベースに移行します。
-
データベース全体を移行する。
-
ネイティブツールで最小のダウンタイムでデータを移行できる。
pg_dump ユーティリティは COPY コマンドを使用して PostgreSQL データベースのスキーマとデータダンプを作成します。pg_dump によって生成されるダンプ スクリプトは、同じ名前のデータベースにデータをロードし、テーブル、インデックス、外部キーを再作成します。pg_restore
コマンドと -d
パラメータを使用して、データを別の名前でデータベースに復元できます。
で実行されている PostgreSQL ソースデータベースから Amazon RDS for PostgreSQL ターゲットEC2にデータを移行する場合は、pglogical プラグインを使用できます。
Amazon RDS for PostgreSQL または Amazon Aurora PostgreSQL SQL互換エディションへの Postgre データベースのインポートの詳細については、「」を参照してくださいhttps://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html。
DMS を使用して PostgreSQL から Postgre にデータを移行するSQL
AWS DMS は、オンプレミスのソース PostgreSQL データベースからターゲット Amazon RDS for PostgreSQL または Aurora PostgreSQL インスタンスにデータを移行できます。コアまたは基本的な PostgreSQL データ型は、ほとんどの場合正常に移行されます。
注記
PostgreSQL ソースから PostgreSQL ターゲットにパーティション化されたテーブルをレプリケートする場合、DMSタスクの選択基準の一部として親テーブルを記述する必要はありません。親テーブルに言及すると、ターゲット上の子テーブルでデータが複製され、PK 違反が発生する可能性があります。テーブルマッピングの選択基準で子テーブルのみを選択すると、親テーブルに自動代入されます。
ソースデータベースでサポートされているが、ターゲットでサポートされていないデータ型は正常に移行されない可能性があります。データ型が不明な場合、 は一部のデータ型を文字列として AWS DMS ストリーミングします。XML や などの一部のデータ型はJSON、小さなファイルとして正常に移行できますが、大きなドキュメントの場合は失敗する可能性があります。
データ型の移行を実行するときは、以下について注意してください:
-
場合によっては、PostgreSQL NUMERIC(p,s) データ型は精度とスケールを指定しません。DMS バージョン 3.4.2 以前では、 は精度 28、スケールはデフォルトで 6 NUMERIC(28,6) DMSを使用します。例えば、ソースからの値 0.611111104488373 は、PostgreSQL ターゲットで 0.611111 に変換されます。
-
ARRAY データ型のテーブルにはプライマリキーが必要です。プライマリキーがないARRAYデータ型を持つテーブルは、フルロード中に一時停止されます。
次の表は、ソース PostgreSQL データ型と、正常に移行できるかどうかを示しています。
データ型 | 正常に移行 | 部分的に移行 | 移行しない | コメント |
---|---|---|---|---|
INTEGER | X | |||
SMALLINT | X | |||
BIGINT | X | |||
NUMERIC/ DECIMAL(p,s) | X | この場合、0<p<39 と 0<s | ||
NUMERIC/DECIMAL | X | この場合、p>38 または p=s=0 | ||
REAL | X | |||
DOUBLE | X | |||
SMALLSERIAL | X | |||
SERIAL | X | |||
BIGSERIAL | X | |||
MONEY | X | |||
CHAR | X | 精度の指定なし | ||
CHAR(n) | X | |||
VARCHAR | X | 精度の指定なし | ||
VARCHAR(n) | X | |||
TEXT | X | |||
BYTEA | X | |||
TIMESTAMP | X | 正と負の無限大値はそれぞれ '9999-12-31 23:59:59 'と '4713-01-01 00:00:00 BC' に切り捨てられます。 | ||
TIMESTAMP WITH TIME ZONE | X | |||
DATE | X | |||
TIME | X | |||
TIME WITH TIME ZONE | X | |||
INTERVAL | X | |||
BOOLEAN | X | |||
ENUM | X | |||
CIDR | X | |||
INET | X | |||
MACADDR | X | |||
TSVECTOR | X | |||
TSQUERY | X | |||
XML | X | |||
POINT | X | 空間データ型をポストGISする | ||
LINE | X | |||
LSEG | X | |||
BOX | X | |||
PATH | X | |||
POLYGON | X | 空間データ型をポストGISする | ||
CIRCLE | X | |||
JSON | X | |||
ARRAY | X | プライマリ キーが必要です | ||
COMPOSITE | X | |||
RANGE | X | |||
LINESTRING | X | 空間データ型をポストGISする | ||
MULTIPOINT | X | 空間データ型をポストGISする | ||
MULTILINESTRING | X | 空間データ型をポストGISする | ||
MULTIPOLYGON | X | 空間データ型をポストGISする | ||
GEOMETRYCOLLECTION | X | 空間データ型をポストGISする |
ポストGIS空間データ型の移行
空間データは、空間内のオブジェクトまたは位置のジオメトリ情報を識別します。PostgreSQL オブジェクトリレーショナルデータベースは、PostGIS 空間データ型をサポートしています。
PostgreSQL 空間データオブジェクトを移行する前に、Post GISプラグインがグローバルレベルで有効になっていることを確認してください。これにより、 は PostgreSQL ターゲット DB インスタンスの正確なソース空間データ列 AWS DMS を作成します。
PostgreSQL から PostgreSQL への同種移行の場合、 は、Post の幾何学的および地理的 (地理座標) データオブジェクトタイプとサブタイプの移行 AWS DMS GISをサポートします。例えば、次のようにします。
-
POINT
-
LINESTRING
-
POLYGON
-
MULTIPOINT
-
MULTILINESTRING
-
MULTIPOLYGON
-
GEOMETRYCOLLECTION
を使用して Babelfish for Amazon Aurora PostgreSQL から移行する AWS DMS
Babelfish for Aurora PostgreSQL ソーステーブルは、 を使用してサポートされている任意のターゲットエンドポイントに移行できます AWS DMS。
DMS コンソール、API、または CLI コマンドを使用して AWS DMS ソースエンドポイントを作成するときは、ソースを Amazon Aurora Postgre SQLに設定し、データベース名を に設定しますbabelfish_db
。エンドポイント設定セクションで、 DatabaseModeが Babelfish に設定BabelfishDatabaseNameされ、ソース Babelfish T-SQL データベースの名前に設定されていることを確認します。Babelfish TCP ポート を使用する代わりに1433
、Aurora PostgreSQL TCP ポート を使用します5432
。
が適切なデータ型とテーブルメタデータDMSを使用していることを確認するには、データを移行する前にテーブルを作成する必要があります。移行を実行する前にターゲットにテーブルを作成しない場合、 は誤ったデータ型とアクセス許可を持つテーブルを作成するDMS可能性があります。
移行タスクへの変換ルールの追加
Babelfish ソースの移行タスクを作成するときは、 が事前に作成されたターゲットテーブルDMSを使用するようにするための変換ルールを含める必要があります。
Babelfish for PostgreSQL クラスターを定義したときにマルチデータベース移行モードを設定する場合は、スキーマ名を T-SQL スキーマに変更する変換ルールを追加します。例えば、T-SQL スキーマ名が でdbo
、Babelfish for PostgreSQL スキーマ名が の場合mydb_dbo
、変換ルールdbo
を使用してスキーマの名前を に変更します。PostgreSQL スキーマ名を確認するには、「Amazon Aurora ユーザーガイド」の「Babelfish アーキテクチャ」を参照してください。
シングルデータベースモードを使用する場合、変換ルールを使用してデータベーススキーマの名前を変更する必要はありません。PostgreSQL スキーマ名には、 one-to-oneT-SQL データベース内のスキーマ名へのマッピングがあります。
次の変換ルールの例は、スキーマ名を mydb_dbo
から に戻す方法を示していますdbo
。
{ "rules": [ { "rule-type": "transformation", "rule-id": "566251737", "rule-name": "566251737", "rule-target": "schema", "object-locator": { "schema-name": "mydb_dbo" }, "rule-action": "rename", "value": "dbo", "old-value": null }, { "rule-type": "selection", "rule-id": "566111704", "rule-name": "566111704", "object-locator": { "schema-name": "mydb_dbo", "table-name": "%" }, "rule-action": "include", "filters": [] } ] }
Babelfish テーブルで PostgreSQL ソースエンドポイントを使用するための制限事項
Babelfish テーブルで PostgreSQL ソースエンドポイントを使用する場合、次の制限が適用されます。
DMS は、Babelfish バージョン 16.2/15.6 以降、およびDMSバージョン 3.5.3 以降の移行のみをサポートします。
DMS は、Babelfish テーブル定義の変更をターゲットエンドポイントにレプリケートしません。この制限の回避策は、まずターゲットにテーブル定義の変更を適用し、次に Babelfish ソースでテーブル定義を変更することです。
BYTEA データ型を使用して Babelfish テーブルを作成すると、 はターゲットとして SQL Server に移行するときに、それらを
varbinary(max)
データ型DMSに変換します。DMS は、バイナリデータ型のフルLOBモードをサポートしていません。バイナリデータ型には制限LOBモードを使用します。
DMS は、Babelfish をソースとしてのデータ検証をサポートしていません。
ターゲットテーブル準備モードのタスク設定では、何もしないまたは切り捨てモードのみを使用します。[ターゲット上のテーブルを削除] モードは使用しないでください。ターゲット でドロップテーブルを使用する場合、 は誤ったデータ型を持つテーブルを作成するDMS可能性があります。
継続的なレプリケーション (CDC またはフルロードと CDC) を使用する場合は、
PluginName
追加の接続属性 (ECA) を に設定しますTEST_DECODING
。-
DMS は、Babelfish のパーティションテーブルのレプリケーション (CDC またはフルロードと CDC) をソースとしてサポートしていません。
PostgreSQL ソースデータベースからの AWS DMS アーティファクトの削除
DDL イベントをキャプチャするには、移行タスクの開始時に PostgreSQL データベースにさまざまなアーティファクト AWS DMS を作成します。タスクが完了したら、これらのアーティファクトを削除できます。
アーティファクトを削除するには、以下のステートメントを発行します (示されている順序で)。ここに、{AmazonRDSMigration}
は、アーティファクトが作成されたスキーマです。スキーマを削除する場合でも、細心の注意を払ってください。運用中のスキーマ (特に公開スキーマ) は絶対に削除しないでください。
drop event trigger awsdms_intercept_ddl;
イベントトリガーは特定のスキーマに属していません。
drop function {AmazonRDSMigration}.awsdms_intercept_ddl() drop table {AmazonRDSMigration}.awsdms_ddl_audit drop schema {AmazonRDSMigration}
PostgreSQL データベースをDMSソースとして使用する場合の追加設定
PostgreSQL データベースからデータを移行するときは、次の 2 つの方法で設定を追加できます。
-
追加の接続属性に値を追加してDDLイベントをキャプチャし、運用DDLデータベースアーティファクトが作成されるスキーマを指定できます。詳細については、「PostgreSQL をDMSソースとして使用する場合のエンドポイント設定と追加接続属性 (ECAs)」を参照してください。
-
接続文字列パラメータを上書きできます。これを行うには、次のいずれかのオプションを選択します:
-
内部 AWS DMS パラメータを指定します。このようなパラメータが必要になることはめったにないため、ユーザー インターフェイスには表示されません。
-
特定のデータベースクライアントのパススルー (パススルー) 値を指定します。 データベースクライアントに渡される接続スティングにパススルーパラメータ AWS DMS が含まれます。
-
-
REPLICA IDENTITY
PostgreSQL バージョン 9.4 以降のテーブルレベルのパラメータを使用すると、先行書き込みログ () に書き込まれる情報を制御できますWALs。特に、 WALsは更新または削除された行を識別します。 は行内のすべての列の古い値REPLICA IDENTITY FULL
を記録します。は、必要でないWALs可能性のある追加の数FULL
を生成するため、テーブルごとにREPLICA IDENTITY FULL
慎重に使用してください。詳細については、ALTERTABLE「-」を参照してください。REPLICA IDENTITY
MapBooleanAsBoolean PostgreSQL エンドポイント設定の使用
PostgreSQL エンドポイント設定を使用して、ブール値を PostgreSQL ソースから Amazon Redshift ターゲットにブール値としてマッピングできます。デフォルトでは、BOOLEANタイプは varchar(5) として移行されます。次の例に示すようにMapBooleanAsBoolean
、PostgreSQL にブール型をブール型として移行させるように を指定できます。
--postgre-sql-settings '{"MapBooleanAsBoolean": true}'
この設定を有効にするには、ソースエンドポイントとターゲットエンドポイントの両方でこの設定を設定する必要があることに注意します。
MySQL にはBOOLEANタイプがないため、BOOLEANデータを My に移行するときは、この設定ではなく変換ルールを使用しますSQL。
PostgreSQL をDMSソースとして使用する場合のエンドポイント設定と追加接続属性 (ECAs)
エンドポイント設定と追加の接続属性 (ECAs) を使用して、PostgreSQL ソースデータベースを設定できます。 AWS DMS コンソールを使用してソースエンドポイントを作成するとき、または --postgre-sql-settings '{"
JSON 構文で の EndpointSetting"
: "value"
, ...
}'create-endpoint
コマンドを使用してAWS CLI、エンドポイント設定を指定します。
次の表は、PostgreSQL ECAsをソースとして使用できるエンドポイント設定と を示しています。
属性名 | 説明 |
---|---|
|
DDL イベントをキャプチャするには、タスクの開始時に PostgreSQL データベースにさまざまなアーティファクト AWS DMS を作成します。PostgreSQL ソースデータベースからの AWS DMS アーティファクトの削除に記載されているように、これらのアーティファクトは後で削除できます。 この値が false に設定されている場合、ソースデータベースにテーブルやトリガーを作成する必要はない。 ストリーミングDDLイベントがキャプチャされます。 デフォルト値: 有効な値: true/false 例: |
|
重複するログシーケンス番号 (LSNs) を持つモノリシックトランザクションのレプリケート方法を制御するために使用されます。このパラメータが の場合 デフォルト値: 有効な値: false/true 例: |
|
運用DDLデータベースアーティファクトが作成されるスキーマを設定します。 デフォルト値: public 有効な値: 文字列 例: |
|
PostgreSQL インスタンスのクライアントステートメントのタイムアウトを秒単位で設定します。デフォルト値は 60 秒です。 例: |
|
に設定すると タスクが制限LOBモードに設定され、このオプションが true に設定されている場合、LOBデータは切り捨てられる代わりにタスクは失敗します。 デフォルト値: false 有効な値: ブール値 例: |
|
この追加の接続属性 (ECA) は、フルロードオペレーション中にカーソルが取得する行数を設定します。レプリケーションインスタンスで利用可能なリソースに応じて、この値を増減して調整できる。 デフォルト値: 有効な値: 数値 ECA 例: |
|
WAL ハートビート機能はダミートランザクションを模倣するため、アイドル状態の論理レプリケーションスロットが古いWALログに保持されないため、ソースのストレージフル状況が発生します。このハートビートは デフォルト値: 有効な値: true/false 例: |
|
WAL ハートビートの頻度 (分単位) を設定します。 デフォルト値: 有効な値: 数値 例: |
|
ハートビート アーティファクトが作成されるスキーマを設定します。 デフォルト値: 有効な値: 文字列 例: |
|
デフォルトでは、 は JSONBに AWS DMS マッピングされますNCLOB。PostgreSQL にJSONBタイプを として移行させる 例: |
|
デフォルトでは、 は VARCHARに AWS DMS マッピングされますWSTRING。を指定
例: |
|
このパラメータは、数値の精度を失わずに正常に移行STRINGするために、無制限NUMERICのデータ型の列を として扱います。このパラメータは、PostgreSQL ソースから PostgreSQL ターゲットへのレプリケーション、または PostgreSQL 互換のデータベースにのみ使用します。 デフォルト値: 有効な値: 例: このパラメータを使用すると、数値から文字列への変換、および数値への変換により、レプリケーションのパフォーマンスが低下する可能性があります。このパラメータは、DMSバージョン 3.4.4 以降で使用できます。 注記
ソース PostgreSQL エンドポイント PostgreSQL 以外のターゲット |
|
レプリケーション スロットの作成に使用するプラグインを指定します。 有効な値: 例: |
|
PostgreSQL ソースインスタンスのCDCロード用に以前に作成した論理レプリケーションスロットの名前を設定します。
有効な値: 文字列 例: |
|
この追加接続属性 (ECA) は、最大長指定子 VarChar のないタイプとして定義されるデータ列の最大サイズを定義します。デフォルトは 8000 バイトです。最大値は 10485760 バイトです。 |
PostgreSQL データベースをDMSソースとして使用する際の制限
PostgreSQL を のソースとして使用する場合は、次の制限が適用されます AWS DMS。
-
AWS DMS は、ソースまたはターゲットとして Amazon RDS for PostgreSQL 10.4 または Amazon Aurora PostgreSQL 10.4 では動作しません。
-
キャプチャされたテーブルにはプライマリキーが必要です。テーブルにプライマリキーがない場合は、そのテーブルのオペレーション AWS DMS を無視DELETEしてUPDATE記録します。回避策として、「論理レプリケーション を使用した変更データキャプチャ (CDC) の有効化」を参照してください。
注: プライマリキー/一意インデックスなしで移行することはお勧めしません。そうでない場合は、「NO」バッチ適用機能、フルLOB機能、データ検証、Redshift ターゲットへの効率的なレプリケート不能などの追加の制限が適用されます。
-
AWS DMS は、プライマリキーセグメントを更新しようとする試みを無視します。この場合、ターゲットは、その更新によってどの行も更新されないと識別します。ただし、PostgreSQL でプライマリキーを更新した結果は予測できないため、例外テーブルにはレコードが書き込まれません。
-
AWS DMS は、タイムスタンプからプロセス変更を開始する実行オプションをサポートしていません。
-
AWS DMS は、パーティションまたはサブパーティションオペレーション (
ADD
、、DROP
または ) から生じる変更をレプリケートしませんTRUNCATE
。 -
同じ名前の複数のテーブルのレプリケーションでは、各名前の大文字と小文字 (例: table1、、Table1) が異なる場合TABLE1、予期しない動作が発生する可能性があります。この問題のため、 AWS DMS はこの種のレプリケーションをサポートしていません。
-
ほとんどの場合、 は tables の CREATE、ALTER、および DROPDDLステートメントの変更処理 AWS DMS をサポートします。テーブルが内部関数またはプロシージャ本文ブロックまたは他のネストされたコンストラクトに保持されている場合、この変更処理はサポート AWS DMS されません。
たとえば、以下の変更はキャプチャされません。
CREATE OR REPLACE FUNCTION attu.create_distributors1() RETURNS void LANGUAGE plpgsql AS $$ BEGIN create table attu.distributors1(did serial PRIMARY KEY,name varchar(40) NOT NULL); END; $$;
-
現在、PostgreSQL ソース
boolean
のデータ型は、一貫性のない値を持つbit
データ型としてSQLサーバーターゲットに移行されます。回避策として、列VARCHAR(1)
のデータ型を持つテーブルを事前に作成します (またはテーブルを作成してください AWS DMS)。次に、ダウンストリーム処理で「F」を False、「T」を True として扱います。 -
AWS DMS はTRUNCATEオペレーションの変更処理をサポートしていません。
-
OID LOB データ型はターゲットに移行されません。
AWS DMS は、同種移行のみの PostGIS データ型をサポートしています。
-
ソースがオンプレミスまたは Amazon EC2インスタンス上の PostgreSQL データベースの場合は、Test_decoding 出力プラグインがソースエンドポイントにインストールされていることを確認します。このプラグインは、PostgreSQL コンリブパッケージにあります。テストデコードプラグインの詳細については、PostgreSQL ドキュメント
を参照してください。 -
AWS DMS は、列のデフォルト値を設定および設定解除する変更処理をサポートしていません ( ALTER TABLE ステートメントの ALTERCOLUMNSETDEFAULT句を使用)。
-
AWS DMS は、列の nullability を設定する変更処理をサポートしていません (ALTERTABLEステートメントの ALTER COLUMN [SET|DROP] NOTNULL句を使用)。
-
論理レプリケーションが有効な場合、トランザクションあたりのメモリに保持される変更の最大数は 4 MB です。その後、変更がディスクにこぼれます。その結果、
ReplicationSlotDiskUsage
が増加し、トランザクションが完了または停止し、ロールバックが完了するまでrestart_lsn
は進みません。長いトランザクションであるため、ロールバックに時間がかかることがあります。したがって、論理レプリケーションが有効になっている場合は、長時間実行されるトランザクションや多くのサブトランザクションは避けてください。代わりに、トランザクションをいくつかの小さなトランザクションに分割します。Aurora PostgreSQL バージョン 13 以降では、
logical_decoding_work_mem
パラメータを調整して、 DMS がいつデータをディスクに変更するかを制御できます。詳細については、「Aurora Postgre のスピルファイルSQL」を参照してください。 -
ARRAY データ型のテーブルにはプライマリキーが必要です。プライマリキーがないARRAYデータ型を持つテーブルは、フルロード中に一時停止されます。
-
AWS DMS は、パーティション化されたテーブルのレプリケーションをサポートしていません。パーティション分割されたテーブルが検出された場合、以下の状況が発生します。
-
エンドポイントは、親テーブルと子テーブルのリストを報告します。
-
AWS DMS は、選択したテーブルと同じプロパティを持つ通常のテーブルとしてターゲット上にテーブルを作成します。
-
ソースデータベースの親テーブルに子テーブルと同じプライマリキー値がある場合、「重複するキー」エラーが生成されます。
-
-
パーティション分割されたテーブルを PostgreSQL ソースから PostgreSQL ターゲットにレプリケートするには、まずターゲットに親テーブルと子テーブルを手動で作成します。次に、それらのテーブルにレプリケーションする別個のタスクを定義します。その場合、タスク設定を [Truncate before loading] (読み取り前切り捨て) に設定します。
-
PostgreSQL
NUMERIC
データ型のサイズは固定されていません。NUMERIC
データ型であるが精度とスケールがないデータを転送する場合、 はデフォルトでNUMERIC(28,6)
(精度 28 とスケール 6) DMSを使用します。例えば、ソースからの値 0.611111104488373 は PostgreSQL ターゲットで 0.61111 に変換されます。 -
AWS DMS は、Aurora PostgreSQL Serverless V1 をフルロードタスクのソースとしてのみサポートします。 は、Aurora PostgreSQL Serverless V2 をフルロード、フルロード、および CDCCDCのみのタスクのソースとして AWS DMS サポートします。
-
AWS DMS は、コアレス関数で作成された一意のインデックスを持つテーブルのレプリケーションをサポートしていません。
-
LOB モードを使用する場合、ソーステーブルと対応するターゲットテーブルの両方に同じプライマリキーが必要です。いずれかのテーブルにプライマリキーがない場合、 DELETEおよび UPDATEレコードオペレーションの結果は予測できません。
-
並列ロード機能を使用する場合、パーティションまたはサブパーティションに基づくテーブルのセグメント化はサポートされません。並列ロードの詳細については、「選択したテーブルおよびビューさらにコレクションで並列ロードを使用する」を参照してください。
-
AWS DMS は延期された制約をサポートしていません。
-
AWS DMS バージョン 3.4.7 では、PostgreSQL 14.x をソースとしてサポートしていますが、以下の制限があります。
-
AWS DMS は、2 つのフェーズコミットの変更処理をサポートしていません。
-
AWS DMS は、進行中のトランザクションを長時間ストリーミングするための論理レプリケーションをサポートしていません。
-
-
AWS DMS は、Amazon RDS Proxy for PostgreSQL CDCをソースとしてサポートしていません。
-
プライマリキー列を含まない ソースフィルター を使用する場合、
DELETE
操作はキャプチャされません。 -
ソースデータベースが別のサードパーティーレプリケーションシステムのターゲットでもある場合、 中にDDL変更が移行されない可能性がありますCDC。これは、このような状況では
awsdms_intercept_ddl
イベントトリガーが起動しなくなる可能性があるためです。この状況を回避するには、ソースデータベースでこのトリガーを次のとおり変更します。alter event trigger awsdms_intercept_ddl enable always;
-
AWS DMS では、Postgre RDS SQL マルチ AZ データベースクラスターは論理レプリケーションをサポートしていないため、 はソースとして PostgreSQL RDS用の CDC Amazon マルチ AZ データベースクラスターをサポートしていません。
Postgre のソースデータ型SQL
次の表は、 の使用時にサポートされる PostgreSQL ソースデータ型 AWS DMS と、 AWS DMS データ型へのデフォルトのマッピングを示しています。
ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションをご参照ください。
AWS DMS データ型の詳細については、「」を参照してくださいAWS Database Migration Service のデータ型。
PostgreSQL データ型 |
DMS データ型 |
---|---|
INTEGER |
INT4 |
SMALLINT |
INT2 |
BIGINT |
INT8 |
NUMERIC (p,s) |
精度が 0~38 の場合は、 を使用しますNUMERIC。 精度が 39 以上の場合は、 を使用しますSTRING。 |
DECIMAL(P,S) |
精度が 0~38 の場合は、 を使用しますNUMERIC。 精度が 39 以上の場合は、 を使用しますSTRING。 |
REAL |
REAL4 |
DOUBLE |
REAL8 |
SMALLSERIAL |
INT2 |
SERIAL |
INT4 |
BIGSERIAL |
INT8 |
MONEY |
NUMERIC(38,4) MONEY データ型は SQL Server FLOATで にマッピングされます。 |
CHAR |
WSTRING (1) |
CHAR(N) |
WSTRING (n) |
VARCHAR(N) |
WSTRING (n) |
TEXT |
NCLOB |
CITEXT |
NCLOB |
BYTEA |
BLOB |
TIMESTAMP |
DATETIME |
TIMESTAMP WITH TIME ZONE |
DATETIME |
DATE |
DATE |
TIME |
TIME |
TIME WITH TIME ZONE |
TIME |
INTERVAL |
STRING (128) — 1 YEAR、2 MONTHS、3 DAYS、4 HOURS、5 MINUTES、6 SECONDS |
BOOLEAN |
CHAR (5) false または true |
ENUM |
STRING (64) |
CIDR |
STRING (50) |
INET |
STRING (50) |
MACADDR |
STRING (18) |
BIT (n) |
STRING (n) |
BIT VARYING (n) |
STRING (n) |
UUID |
STRING |
TSVECTOR |
CLOB |
TSQUERY |
CLOB |
XML |
CLOB |
POINT |
STRING (255) 「(x,y)」 |
LINE |
STRING (255) 「(x,y,z)」 |
LSEG |
STRING (255) 「(x1,y1),(x2,y2))」 |
BOX |
STRING (255) 「(x1,y1),(x2,y2))」 |
PATH |
CLOB 「(x1,y1),(xn,yn))」 |
POLYGON |
CLOB 「(x1,y1),(xn,yn))」 |
CIRCLE |
STRING (255) 「(x,y),r」 |
JSON |
NCLOB |
JSONB |
NCLOB |
ARRAY |
NCLOB |
COMPOSITE |
NCLOB |
HSTORE |
NCLOB |
INT4RANGE |
STRING (255) |
INT8RANGE |
STRING (255) |
NUMRANGE |
STRING (255) |
STRRANGE |
STRING (255) |
Postgre のLOBソースデータ型の使用SQL
PostgreSQL 列のサイズは、PostgreSQL LOB データ型の AWS DMS データ型への変換に影響します。これを使用するには、次の AWS DMS データ型で以下の手順を実行します。
-
BLOB – タスクの作成時に制限LOBサイズを最大LOBサイズ (KB) 値に設定します。
-
CLOB – レプリケーションは各文字をUTF8文字として扱います。次に、列で最長の文字テキストの長さ (ここでは、
max_num_chars_text
) を見つけます。この長さを使用して、 の制限LOBサイズの値を指定します。データに 4 バイト文字が含まれている場合は、2 を掛けて、バイト単位で値に制限LOBサイズを指定します。この場合、 の制限LOBサイズは 2 をmax_num_chars_text
掛けた値に等しくなります。 -
NCLOB – レプリケーションは、各文字を 2 バイト文字として扱います。次に、列で最長の文字テキストの長さ (
max_num_chars_text
) を見つけ、2 倍します。これを実行して、 の制限LOBサイズの値を指定します。この場合、 の制限LOBサイズは 2 をmax_num_chars_text
掛けた値に等しくなります。データに 4 バイト文字が含まれている場合は、再度 2 倍にします。この場合、 の制限LOBサイズは 4 をmax_num_chars_text
掛けた値に等しくなります。