PostgreSQL データベースをAWS DMSsource - AWS Database Migration Service

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

PostgreSQL データベースをAWS DMSsource

AWS DMS を使用して、1 つ以上の PostgreSQL データベースからデータを移行できます。PostgreSQL データベースをソースとして使用すると、別の PostgreSQL データベースまたはサポートされている他のデータベースのいずれかにデータを移行できます。AWS DMSでは、以下のタイプのデータベースのソースとして、PostgreSQL バージョン 9.4 以降 (バージョン 9.x の場合)、10.x、11.x、12.x、および 13.x データベースをサポートしています。

  • オンプレミスのデータベース

  • Amazon EC2 インスタンス上のデータベース

  • Amazon RDS DB インスタンス上のデータベース

  • Amazon Aurora PostgreSQL 互換エディションに基づく DB インスタンス上のデータベース

PostgreSQL ソースバージョン

使用する AWS DMS バージョン

9.x、10.x、11.x、12.x

使用可能な任意の AWS DMS バージョンを使用します。

13.x

を使用するAWS DMSバージョン 3.4.3 以降。

Secure Socket Layer (SSL) を使用して、PostgreSQL エンドポイントとレプリケーションインスタンスとの接続を暗号化できます。PostgreSQL エンドポイントで SSL を使用する方法の詳細については、「AWS Database Migration Service での SSL の使用」を参照してください。

PostgreSQL をソースとして使用する場合の追加のセキュリティ要件として、指定されるユーザーアカウントは PostgreSQL データベースの登録済みユーザーである必要があります。

PostgreSQL データベースをAWS DMSソースエンドポイントで、次の操作を行います。

で自己管理された PostgreSQL データベースをソースとして使用するAWS DMS

自己管理型 PostgreSQL データベースをソースとして使用すると、別の PostgreSQL データベースまたはでサポートされている他のターゲットデータベースのいずれかにデータを移行できます。AWS DMS。データベースソースには、オンプレミスのデータベースまたは Amazon EC2 インスタンスで実行されているセルフマネージド型エンジンを使用できます。DB インスタンスは、全ロードタスクと変更データキャプチャ (CDC) タスクの両方に使用できます。

セルフマネージド型 PostgreSQL データベースをAWS DMSsource

自己管理型 PostgreSQL ソースデータベースからデータを移行する前に、以下の操作を行います。

  • バージョン 9.4.x 以降の PostgreSQL データベースを使用してください。

  • フルロードと 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

    PostgreSQL の pg_hba.conf の設定ファイルはクライアント認証を制御します。(HBA はホストベースの認証を表します) ファイルは従来、データベースクラスターのデータディレクトリに保存されています。

  • を使用してデータベースを論理レプリケーションのソースとして構成する場合AWS DMSseeセルフマネージド型 PostgreSQL データベースを使用する CDC の有効化AWS DMSsource

注記

ある程度AWS DMSトランザクションでは、DMS エンジンで再度そのパラメータが使用されるまでの間、しばらくアイドル状態になることがあります。パラメータを使用するidle_in_transaction_session_timeoutPostgreSQL バージョン 9.6 以降では、アイドル状態のトランザクションでタイムアウトやエラーが生じる場合があります。AWS DMS を使用する際、アイドル状態のトランザクションを終了しないでください。

セルフマネージド型 PostgreSQL データベースを使用する CDC の有効化AWS DMSsource

AWS DMSは、論理レプリケーションを使用した変更データキャプチャ (CDC) をサポートしています。自己管理された PostgreSQL ソースデータベースの論理レプリケーションを有効にするには、postgresql.conf設定ファイル:

  • wal_level = logical を設定します。

  • max_replication_slots を 1 より大きい値に設定します。

    設定:max_replication_slots値は、実行するタスクの数に従って指定します。たとえば、5 つのタスクを実行するには、少なくとも 5 つのスロットを設定します。スロットは、タスクが開始するとすぐに自動的に開き、タスクが実行されなくなった場合でも開いたままです。開いているスロットは必ず手動で削除してください。

  • max_wal_senders を 1 より大きい値に設定します。

    max_wal_senders パラメータは、実行可能な同時タスクの数を設定します。

  • wal_sender_timeout =0 を設定します。

    -wal_sender_timeoutパラメータは、指定されたミリ秒数が過ぎても非アクティブなレプリケーション接続を終了します。デフォルトは 60 秒ですが、このパラメータは 0 に設定することをお勧めします。これを行うと、タイムアウトメカニズムがオフになります。

一部のパラメーターは静的であり、サーバー起動時にのみ設定できます。設定ファイル (自己管理型データベースの場合) または DB パラメータグループ (RDS for PostgreSQL データベース) のエントリに対する変更は、サーバーが再起動されるまで無視されます。詳細については、PostgreSQL ドキュメントを参照してください。

CDC の有効化の詳細については、「」を参照してください。論理レプリケーションを使用した変更データキャプチャ (CDC) の有効化

の使用AWSPostgreSQL データベースを DMS ソースとして管理する

次の処理を行います。AWSのソースとしての PostgreSQL DB インスタンスの管理AWS DMS。を使用して、全ロードタスクと変更データキャプチャ (CDC) タスクの両方を実行できます。AWS-管理された PostgreSQL ソース。

を使用するための前提条件AWS-DMS ソースとしての PostgreSQL データベースの管理

からデータを移行する前にAWS-maned PostgreSQL ソースデータベースで、以下の操作を実行します。

  • を使用するAWSへの PostgreSQL ソースエンドポイント用のユーザーアカウントとして PostgreSQL DB インスタンスのマスターユーザーアカウントを指定します。AWS DMS。マスターユーザーアカウントには、CDC を設定するために必要なロールがあります。マスターユーザーアカウント以外のアカウントを使用する場合、アカウントにはrds_superuserロールとrds_replicationロール。-rds_replicationrole は、論理スロットを管理し、論理スロットを使用してデータをストリーミングするアクセス権限を付与します。

    DB インスタンスにマスターユーザーアカウントを使用しない場合は、使用するアカウントのマスターユーザーアカウントから複数のオブジェクトを作成してください。これらの作成の詳細については、「」を参照してください。マスターユーザーアカウントの使用なしでの Amazon RDS for PostgreSQL データベースの移行

  • ソースデータベースが Virtual Private Cloud (VPC) にある場合は、データベースが存在する DB インスタンスへのアクセス権を提供する VPC セキュリティグループを選択します。これは、DMS レプリケーションインスタンスがソース DB インスタンスに正常に接続するために必要です。データベースと DMS レプリケーションインスタンスが同じ VPC 内にある場合は、適切なセキュリティグループを独自のインバウンドルールに追加します。

注記

ある程度AWS DMSトランザクションでは、DMS エンジンで再度そのパラメータが使用されるまでの間、しばらくアイドル状態になることがあります。パラメータを使用するidle_in_transaction_session_timeoutPostgreSQL バージョン 9.6 以降では、アイドル状態のトランザクションでタイムアウトやエラーが生じる場合があります。AWS DMS を使用する際、アイドル状態のトランザクションを終了しないでください。

での CDC の有効化AWSで管理する PostgreSQL DB インスタンスAWS DMS

AWS DMSDB インスタンスが論理レプリケーションを使用するように設定されている場合、では Amazon RDS PostgreSQL データベースでの CDC がサポートされています。次の表は、それぞれの論理レプリケーションの互換性をまとめたものです。AWS-管理された PostgreSQL バージョン。

RDS PostgreSQL のリードレプリカを CDC (継続的なレプリケーション) に使用することはできません。

Aurora PostgreSQL バージョン

AWS DMS全ロードサポート

AWS DMSCDC サポート

Aurora PostgreSQL バージョン 2.1 と PostgreSQL 10.5 の互換性 (以下)

あり

いいえ

PostgreSQL 10.6 (以降) の Aurora PostgreSQL バージョン 2.2 と PostgreSQL 11.8 互換バージョン 3.3 まで

あり

あり

RDS PostgreSQL DB インスタンスに対して論理レプリケーションを有効にするには

  1. を使用するAWSPostgreSQL ソースエンドポイント用のユーザーアカウントとして PostgreSQL DB インスタンスのマスターユーザーアカウントです。マスターユーザーアカウントには、CDC を設定するために必要なロールがあります。

    マスターユーザーアカウント以外のアカウントを使用する場合は、使用するアカウントのマスターユーザーアカウントから複数のオブジェクトを作成してください。詳細については、「マスターユーザーアカウントの使用なしでの Amazon RDS for PostgreSQL データベースの移行」を参照してください。

  2. 設定:rds.logical_replicationDB CLUSTER パラメータグループのパラメータを 1 に設定します。この静的パラメータを有効にするには、DB インスタンスを再起動する必要があります。このパラメータを適用する一環として、AWS DMS は wal_levelmax_wal_sendersmax_replication_slotsmax_connections の各パラメータを設定します。これらのパラメータの変更によって先書きログ (WAL) の生成が増える可能性があるため、論理レプリケーションスロットを使用する場合にのみ rds.logical_replication を設定してください。

  3. ベストプラクティスとして、wal_sender_timeout パラメータを 0 に設定します。このパラメータを 0 に設定すると、PostgreSQL が指定したタイムアウトを超えて非アクティブなレプリケーション接続が終了することを防ぎます。AWS DMS がデータを移行するとき、レプリケーション接続は指定するタイムアウトより長く実行できる必要があります。

  4. の価値を確保するmax_worker_processesDB クラスターパラメーターグループのパラメーターが、の合計の合計値以上です。max_logical_replication_workers,autovacuum_max_workers, およびmax_parallel_workers。多数のバックグラウンドワーカープロセスが、小さなインスタンスのアプリケーションワークロードに影響を与える可能性があります。したがって、設定した場合は、データベースのパフォーマンスを監視してください。max_worker_processesデフォルト値より大きい。

マスターユーザーアカウントの使用なしでの Amazon RDS for PostgreSQL データベースの移行

場合によっては、ソースとして使用している Amazon RDS PostgreSQL DB インスタンスのマスターユーザーアカウントを使用しない場合があります。このような場合は、データ定義言語 (DDL) イベントをキャプチャするために複数のオブジェクトを作成します。マスターアカウント以外のアカウントでこれらのオブジェクトを作成し、マスターユーザーアカウントでトリガーを作成します。

注記

ソースエンドポイントで captureDDLs 追加の接続属性を N に設定すると、ソースデータベース上で次のテーブルおよびトリガーを作成する必要はありません。

これらのオブジェクトを作成するには、以下の手順を実行します。

オブジェクトを作成するには

  1. オブジェクトが作成されるスキーマを選択します。デフォルトのスキーマは public です。スキーマが存在し、NoPriv アカウントからアクセス可能であることを確認します。

  2. マスターアカウント以外のユーザーアカウントを使用して PostgreSQL DB インスタンスにログインします。NoPrivアカウント.

  3. テーブルを作成します。awsdms_ddl_audit次のコマンドを実行して、objects_schema以下のコードで、使用するスキーマの名前を指定します。

    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 )
  4. 以下のコマンドを実行して 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') then SELECT current_query() into _qry; insert into objects_schema.awsdms_ddl_audit values ( default,current_timestamp,current_user,cast(TXID_CURRENT()as varchar(16)),tg_tag,0,'',current_schema,_qry ); delete from objects_schema.awsdms_ddl_audit; end if; END; $$;
  5. NoPriv アカウントからログアウトし、rds_superuser ロールが割り当てられたアカウントを使用してログインします。

  6. 以下のコマンドを実行してイベントトリガー awsdms_intercept_ddl を作成します。

    CREATE EVENT TRIGGER awsdms_intercept_ddl ON ddl_command_end EXECUTE PROCEDURE objects_schema.awsdms_intercept_ddl();

前の手順を完了したら、NoPriv アカウントを使用して AWS DMS ソースエンドポイントを作成できます。

注記

これらのイベントは、によってトリガーされます。CREATE TABLE,ALTER TABLE, およびDROP TABLEステートメント。

これらのイベントにアクセスするすべてのユーザーおよびロールに必要な DDL 権限があることを確認します。例:

grant all on public.awsdms_ddl_audit to public; grant all on public.awsdms_ddl_audit_c_key_seq to public;

論理レプリケーションを使用した変更データキャプチャ (CDC) の有効化

PostgreSQL のネイティブ論理レプリケーション機能を使用して、PostgreSQL ソースのデータベースの移行中に変更データキャプチャ (CDC) を有効にすることができます。この機能は、自己管理型 PostgreSQL および Amazon RDS for PostgreSQL SQL DB インスタンスで使用できます。この方法では、ダウンタイムが短縮され、ターゲットデータベースがソース PostgreSQL データベースと同期していることを確認できます。

AWS DMSは、プライマリキーを持つ PostgreSQL テーブルの CDC をサポートしています。テーブルにプライマリキーがない場合、先書きログ (WAL) にはデータベース行の前イメージは含まれません。この場合、DMS はテーブルを更新できません。ここでは、追加の構成設定を使用し、回避策としてテーブルレプリカ ID を使用できます。ただし、この方法では追加のログを生成する可能性があります。注意深いテストの後にのみ、回避策としてテーブルレプリカ ID を使用することをお勧めします。詳細については、「PostgreSQL データベースを DMS ソースとして使用する場合の追加設定」を参照してください。

フルロードおよび CDC および CDC のみのタスクの場合、AWS DMSは、論理レプリケーションスロットを使用して、ログがデコードされるまで、レプリケーション用の WAL ログを保持します。フルロードおよび CDC タスクまたは CDC タスクの再起動(再開ではない)と、レプリケーションスロットが再作成されます。

注記

論理デコードの場合、DMS は test_decoding または pglogical プラグインのいずれかを使用します。pglogical プラグインがソース PostgreSQL データベースで使用できる場合、DMS は pglogical を使用してレプリケーションスロットを作成します。それ以外の場合は test_decoding プラグインが使用されます。

pglogical プラグインの設定

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 ソースデータベースで論理レプリケーションを有効にした後、次の手順に従って、DMS で使用する pglogical を設定します。

を使用して PostgreSQL ソースデータベースで論理レプリケーションに pglogical プラグインを使用するにはAWS DMS

  1. ソースの PostgreSQL データベースに pglogical 拡張機能を作成します。

    1. 正しいパラメータを設定します。

      • 自己管理型 PostgreSQL データベースの場合は、データベースパラメーターを設定します。shared_preload_libraries= 'pglogical'

      • Amazon RDS および Amazon Aurora PostgreSQL 互換エディションの PostgreSQL データベースの場合、パラメーターを設定します。shared_preload_librariespglogical同じ RDS パラメーターグループ内の。

    2. PostgreSQL ソースデータベースを再起動します。

    3. PostgreSQL データベースで、次のコマンドを実行します。create extension pglogical;

  2. pglogical が正常にインストールされたことを確認するには、次のコマンドを実行します。

    select * FROM pg_catalog.pg_extension

  3. CDC タスクを有効にして、次のようにネイティブのスタートポイントを使用します。

    1. 次に示すように、レプリケーションスロットを作成します。

      SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
    2. 次に示すように、2 つのレプリケーションセットを作成します。

      select pglogical.create_replication_set('replication_slot_name', true, false, false, true); select pglogical.create_replication_set('replication_slot_name', false, true, true, false);

    以下に例を示します。

    SELECT * FROM pg_create_logical_replication_slot('test_slot', 'pglogical'); select pglogical.create_replication_set('test_slot', false, true, true, false);

これで、AWS DMSPostgreSQL ソースデータベースエンドポイントの変更データキャプチャを実行するタスク。

注記

PostgreSQL ソースデータベースで pglogical を有効にしないと、AWS DMSを使用します。test_decodingデフォルトでプラグイン。pglogical が論理デコードに対して有効になっている場合、AWS DMSデフォルトでは、pglogical が使用されます。ただし、追加の接続属性を設定することもできます。PluginNameを使用して、test_decoding代わりに、プラグインを使用してください。

ネイティブ CDC スタートポイントを使用して PostgreSQL ソースの CDC ロードを設定する

PostgreSQL をソースとしてネイティブ CDC スタートポイントを有効にするには、slotNameエンドポイントを作成するときの既存の論理レプリケーションスロットの名前に追加の接続属性。この論理レプリケーションスロットは、エンドポイントの作成時点からの継続的な変更を保持するため、以前の時点からのレプリケーションをサポートします。

PostgreSQL は、AWS DMS が論理レプリケーションスロットから変更を正常に読み取った後にのみ破棄される WAL ファイルにデータベースの変更を書き込みます。論理レプリケーションスロットを使用すると、ログに記録された変更がレプリケーションエンジンによって消費される前に削除されないように保護できます。

ただし、変更率と消費率によっては、論理レプリケーションスロットに保持されている変更により、ディスク使用率が高くなることがあります。論理レプリケーションスロットを使用する場合は、ソース PostgreSQL インスタンスにスペース使用アラームを設定することをお勧めします。追加の slotName 接続属性の設定についての詳細は、「DMS ソースとして PostgreSQL を使用する場合の追加の接続属性」を参照してください。

次の手順では、このアプローチについて詳しく説明します。

ネイティブ CDC 開始ポイントを使用して PostgreSQL ソースエンドポイントの CDC ロードを設定するには

  1. 開始点として使用する以前のレプリケーションタスク (親タスク) によって使用されていた論理レプリケーションスロットを特定します。次に、ソースデータベースの pg_replication_slots ビューにクエリを実行して、このスロットにアクティブな接続がないことを確認します。その場合は、先に進む前に解決して閉じてください。

    次のステップでは、論理レプリケーションスロットが abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef であると仮定します。

  2. 次の追加接続属性設定を含む新しいソースエンドポイントを作成します。

    slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;
  3. を使用して、新しい CDC 専用タスクを作成します。AWS CLIまたはAWS DMSアピ。たとえば、CLI を使用して、以下を実行できます。create-replication-taskコマンド。

    AWS DMS は現在、コンソールを使用したネイティブ開始ポイントによる CDC タスクの作成をサポートしていません。

    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-positionoption は、開始位置の値に設定されます。この開始位置を調べるには、ソースデータベースの pg_replication_slots ビューにクエリを実行するか、ステップ 1 で親タスクのコンソール詳細を表示します。詳細については、「CDC ネイティブの開始ポイントの決定」を参照してください。

    この CDC タスクが実行されると、AWS DMS指定された論理レプリケーションスロットが存在しない場合は、エラーを生成します。また、の有効な設定でタスクが作成されていないと、エラーが発生します。cdc-start-position

pglogical プラグインでネイティブ CDC スタートポイントを使用し、新しいレプリケーションスロットを使用する場合は、CDC タスクを作成する前に、次の手順を実行してください。

別の DMS タスクの一部として以前に作成されていない新しいレプリケーションスロットを使用するには

  1. レプリケーションスロットを作成します。

    SELECT * FROM pg_create_logical_replication_slot('replication_slot_name', 'pglogical');
  2. pglogical ノードを作成します。

    SELECT pglogical.create_node(node_name := 'node_name', dsn := 'your_dsn_name');
  3. 複製セットを作成します。

    select pglogical.create_replication_set('replication_slot_name', false, true, true, false); select pglogical.create_replication_set('ireplication_slot_name', true, false, false, true);
  4. レプリケーションセットにテーブルを追加します。

    select pglogical.replication_set_add_table('replication_slot_name', 'schemaname.tablename', true); select pglogical.replication_set_add_table('ireplication_slot_name', 'schemaname.tablename', true);

    次の例を参照してください。

    SELECT * FROM pg_create_logical_replication_slot('test_slot', 'pglogical'); SELECT pglogical.create_node(node_name := 'test_node', dsn := 'your_dsn_name'); select pglogical.create_replication_set('test_slot', false, true, true, false); select pglogical.create_replication_set('itest_slot', true, false, false, true); select pglogical.replication_set_add_table('test_slot', 'schemaname.tablename', true); select pglogical.replication_set_add_table('itest_slot', 'schemaname.tablename', true);
  5. ソースエンドポイントを作成するときに、次の追加接続属性 (ECA) を設定します。

    PluginName=PGLOGICAL;slotName=slot_name;

新しいレプリケーションスロットを使用して PostgreSQL ネイティブのスタートポイントを使用して CDC のみのタスクを作成できるようになりました。

AWS DMS を使用して PostgreSQL から PostgreSQL へ移行します。

PostgreSQL 以外のデータベースエンジンから PostgreSQL データベースに移行すると、AWS DMSは、ほとんどの場合、最適な移行ツールです。しかし、PostgreSQL データベースから PostgreSQL データベースに移行する場合、PostgreSQL ツールがより効果的な場合があります。

PostgreSQL ネイティブツールを使用してデータを移行する

など PostgreSQL データベース移行ツールを使用することをお勧めします。pg_dump以下の条件が適用されます。

  • ソース PostgreSQL データベースからターゲット PostgreSQL データベースに移行する同種移行である。

  • データベース全体を移行する。

  • ネイティブツールで最小のダウンタイムでデータを移行できる。

pg_dump ユーティリティでは、COPY コマンドを使用して、PostgreSQL データベースのスキーマとデータダンプを作成します。pg_dump によって生成されるダンプスクリプトは、同じ名前のデータベースにデータをロードし、テーブル、インデックス、外部キーを再作成します。データを別の名前でデータベースに復元するには、pg_restoreコマンドと-dパラメータ。

EC2 で実行されている PostgreSQL ソースデータベースから Amazon RDS for PostgreSQL ターゲットにデータを移行する場合は、pglogical プラグインを使用できます。

PostgreSQL データベースをAmazon RDS for PostgreSQL や Amazon Aurora PostgreSQL 互換エディションにインポートする方法の詳細については、を参照してくださいhttps://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html

DMS を使用した PostgreSQL から PostgreSQL へのデータの移行

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 以前では、DMS ではデフォルトでは 28 の精度と 6 のスケール (NUMERIC (28,6) が使用されます。たとえば、ソースからの値 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(Z) X
DATE X
TIME X
TIME (z) X
INTERVAL X
BOOLEAN X
ENUM X
CIDR X
INET X
MACADDR X
TSVECTOR X
TSQUERY X
XML X
POINT X PostGIS 空間データ型
LINE X
LSEG X
BOX X
PATH X
POLYGON X PostGIS 空間データ型
CIRCLE X
JSON X
ARRAY X プライマリキーが必要です。
COMPOSITE X
RANGE X
LINESTRING X PostGIS 空間データ型
MULTIPOINT X PostGIS 空間データ型
MULTILINESTRING X PostGIS 空間データ型
MULTIPOLYGON X PostGIS 空間データ型
GEOMETRYCOLLECTION X PostGIS 空間データ型

PostGIS 空間データ型の移行

空間データは、空間内のオブジェクトまたは位置のジオメトリ情報を識別します。PostgreSQL オブジェクトリレーショナルデータベースは、PostGIS 空間データ型をサポートしています。

PostgreSQL 空間データオブジェクトを移行する前に、PostGIS プラグインがグローバルレベルで有効になっていることを確認してください。これを行うと、AWS DMSは、PostgreSQL ターゲット DB インスタンスの正確なソース空間データ列を作成します。

PostgreSQL から PostgreSQL への同種移行の場合、AWS DMS は PostGIS ジオメトリおよび地理的 (測地座標) データオブジェクト型および次のようなサブタイプの移行をサポートします。

  • POINT

  • LINESTRING

  • POLYGON

  • MULTIPOINT

  • MULTILINESTRING

  • MULTIPOLYGON

  • GEOMETRYCOLLECTION

PostgreSQL ソースデータベースからの AWS DMS アーティファクトの削除

DDL イベントをキャプチャするため、移行タスクの開始時に AWS DMS によりさまざまなアーティファクトが PostgreSQL データベースに作成されます。タスクが完了したら、これらのアーティファクトを削除できます。

アーティファクトを削除するには、次のステートメントを発行します (示されている順序で)。{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 データベースアーティファクトが作成されたスキーマを指定します。詳細については、「DMS ソースとして PostgreSQL を使用する場合の追加の接続属性」を参照してください。

  • 接続文字列パラメータを上書きできます。次のいずれかの操作を行うには、このオプションを選択します。

    • 内部 AWS DMS パラメータを指定します。このようなパラメータが必要になることはめったにないため、ユーザーインターフェイスには表示されません。

    • 特定のデータベースクライアントのパススルー (passthru) 値を指定します。AWS DMS では、データベースクライアントに渡される接続文字列にパススルーパラメータが含まれています。

  • テーブルレベルパラメーターを使用するREPLICATE IDENTITYPostgreSQL バージョン 9.4 では、先行書き込みログ (WAL) に書き込まれる情報を制御できます。特に、更新または削除されるローを識別する WAL に対してそうします。REPLICATE IDENTITY FULL行のすべての列の古い値を記録します。を使用するREPLICATE IDENTITY FULLテーブルごとに慎重にFULL必要ないかもしれない追加数の WAL を生成します。

DMS ソースとして PostgreSQL を使用する場合の追加の接続属性

追加の接続属性を使用して PostgreSQL ソースを設定できます。これらの設定は、ソースエンドポイントを作成するときに指定します。接続属性の設定が複数ある場合は、空白を追加せずにそれぞれをセミコロンで区切ります (例: oneSetting;thenAnother)。

次の表に、PostgreSQL を AWS DMS のソースとして使うときに使用できる追加の接続属性を示します。

属性名 説明

captureDDLs

DDL イベントをキャプチャするために、AWS DMS によって、タスクの開始時にさまざまなアーティファクトが PostgreSQL データベースに作成されます。「PostgreSQL ソースデータベースからの AWS DMS アーティファクトの削除」に記載されているように、これらのアーティファクトは後で削除できます。

この値が N に設定されている場合は、ソースデータベースにテーブルまたはトリガーを作成する必要はありません。

ストリーミングされた DDL イベントがキャプチャされます。

デフォルト値: Y

有効な値: Y/N

例: captureDDLs=Y;

ddlArtifactsSchema

運用中の DDL データベースアーティファクトが作成されるスキーマを設定します。

デフォルト値: public

有効な値: 文字列

例: ddlArtifactsSchema=xyzddlschema;

failTasksOnLobTruncation

true に設定されている場合、LOB 列の実際のサイズが、指定された LobMaxSize を上回ると、この値によりタスクは失敗します。

タスクが制限付き LOB モードに設定され、このオプションが true に設定されている場合、LOB データを切り捨てるのではなくタスクが失敗します。

デフォルト値: false

有効な値: ブール値

例: failTasksOnLobTruncation=true;

executeTimeout

PostgreSQL インスタンスのクライアントステートメントタイムアウト (秒単位) を設定します。デフォルト値は 60 秒です。

例: executeTimeout=100;

pluginName

レプリケーションスロットの作成に使用するプラグインを指定します。

有効な値: pglogical, test_decoding

例: pluginName=test_decoding;

slotName

PostgreSQL ソースインスタンスの CDC ロード用に以前に作成された論理レプリケーションスロットの名前を設定します。

AWS DMS API CdcStartPosition リクエストパラメータとともに使用すると、この属性によりネイティブ CDC 開始ポイントの使用も有効になります。DMS は、CDC ロードタスクを開始する前に、指定された論理レプリケーションスロットが存在することを確認します。また、タスクが有効な CdcStartPosition 設定を使用して作成されたことも確認します。指定されたスロットが存在しないか、タスクに有効な CdcStartPosition 設定がない場合、DMS によりエラーが発生します。

CdcStartPosition リクエストパラメータの設定の詳細については、「CDC ネイティブの開始ポイントの決定」を参照してください。の使用方法の詳細については、「」を参照してください。CdcStartPositionについては、「」のドキュメントを参照してください。CreateReplicationTask,StartReplicationTask, およびModifyReplicationTaskの API オペレーションAWS Database Migration ServiceAPI リファレンス

有効な値: 文字列

例: slotName=abc1d2efghijk_34567890_z0yx98w7_6v54_32ut_1srq_1a2b34c5d67ef;

heartbeatEnable

WAL ハートビート機能はダミートランザクションを模倣するため、アイドル状態の論理レプリケーションスロットは古い WAL ログを保持し続けて、ソース上のストレージを一杯にすることがないようにします。このハートビートは restart_lsn を移動し続けるため、ストレージがいっぱいになるシナリオを回避できます。

デフォルト値: false

有効な値: true/false

例: heartbeatEnable=true;

heartbeatFrequency

WAL ハートビートの頻度を設定します (分)。

デフォルト値: 5

有効な値: 数値

例: heartbeatFrequency=1;

heartbeatSchema

ハートビートアーティファクトが作成されるスキーマを設定します。

デフォルト値: public

有効な値: 文字列

例: heartbeatSchema=xyzheartbeatschema

consumeMonotonicEvents

重複するログシーケンス番号 (LSN) を持つモノリシック・トランザクションのレプリケート方法を制御するために使用します。このパラメータが次の場合falseでは、重複した LSN を持つイベントが消費され、ターゲット上でレプリケートされます。このパラメータが次の場合trueでは、最初のイベントのみがレプリケートされ、重複する LSN を持つイベントはターゲット上で消費もレプリケートもされません。

デフォルト値: false

有効な値:false /true

例: consumeMonotonicEvents=true;

mapUnboundedNumericAsString

このパラメーターは、数値の精度を失うことなく正常に移行するために、境界なしの NUMERIC データ型の列を文字列として扱います。このパラメーターは、PostgreSQL ソースから PostgreSQL ターゲットへのレプリケーション、または PostgreSQL 互換のデータベースにのみ使用します。

デフォルト値: false

有効な値: false/true

例: mapUnboundedNumericAsString=true;

このパラメータを使用すると、数値から文字列への変換、および数値への変換により、レプリケーションのパフォーマンスが低下する可能性があります。このパラメータは、DMS バージョン 3.4.4 以降で使用するためにサポートされています。

注記

使用のみmapUnboundedNumericAsStringPostgreSQL ソースとターゲットのエンドポイントで一緒に。

の使用mapUnboundedNumericAsStringソース PostgreSQL エンドポイントでは、CDC 中に精度が 28 に制限されます。の使用mapUnboundedNumericAsStringターゲットエンドポイントで、Precision 28 スケール 6 でデータを移行します。

[] を使用しません。mapUnboundedNumericAsStringPostgreSQL 以外のターゲットを使用します。

PostgreSQL データベースを DMS ソースとして使用する場合の制限

PostgreSQL を AWS DMS のソースとして使用する場合は、以下の制限が適用されます。

  • AWS DMSは、ソースまたはターゲットとして Amazon RDS for PostgreSQL 10.4 または Amazon Aurora PostgreSQL 10.4 では動作しません。

  • キャプチャされたテーブルにはプライマリキーが必要です。テーブルにプライマリキーがない場合、AWS DMS はそのテーブルの DELETE および UPDATE レコードオペレーションを無視します。

  • AWS DMS は、プライマリキーセグメントの更新の試みを無視します。この場合、ターゲットは、その更新によってどの行も更新されないと識別します。ただし、PostgreSQL でのプライマリキーの更新結果は予測できないため、どのレコードも例外テーブルには書き込まれません。

  • AWS DMS では、[Start Process Changes from Timestamp] 実行オプションがサポートされていません。

  • 大文字と小文字の組み合わせが異なる同じ名前 (table1、TABLE1、Table1) を持つ複数のテーブルをレプリケートすると、予測できない動作が生じることがあります。この問題により、AWS DMS ではこのタイプのレプリケーションがサポートされていません。

  • 多くの場合、AWS DMS ではテーブルに対する CREATE、ALTER、DROP DDL ステートメントの変更処理がサポートされています。テーブルが内部関数またはプロシージャ本文ブロックに保持されているか、ネストしている他の構造に保持されている場合、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; $$;
  • 現在、booleanPostgreSQL ソースのデータ型は、SQL Server ターゲットに次のように移行されます。bit一貫性のない値を持つデータ型。回避策として、テーブルをVARCHAR(1)列のデータ型 (または、AWSDMS はテーブルを作成します)。次に、ダウンストリーム処理で「F」を False、「T」を True として扱います。

  • AWS DMSでは、PostgreSQL バージョン 11.x 以降では、TRUNCATE オペレーションの変更処理はサポートされていません。

  • OID LOB データ型は、ターゲットに移行されません。

  • 使用するソースがオンプレミスまたは Amazon EC2 インスタンス上の PostgreSQL データベースの場合、test_decoding 出力プラグインがソースエンドポイントにインストールされていることを確認してください。このプラグインは、Postgres contrib パッケージにあります。test-decoding プラグインの詳細については、「PostgreSQL のドキュメント」を参照してください。

  • AWS DMS では、列のデフォルト値を設定および設定解除するための変更処理はサポートされていません (ALTER TABLE ステートメントでの ALTER COLUMN SET DEFAULT 句の使用)。

  • AWS DMS では、列の null 機能を設定するための変更処理はサポートされていません (ALTER TABLE ステートメントでの ALTER COLUMN [SET|DROP] NOT NULL 句の使用)。

  • 論理レプリケーションが有効な場合、トランザクションあたりのメモリに保持される変更の最大数は 4 MB です。その後、変更がディスクにこぼれます。その結果、ReplicationSlotDiskUsageが増加し、restart_lsnトランザクションが完了または停止し、ロールバックが終了するまで、は進みません。トランザクションが長いため、ロールバックに時間がかかることがあります。したがって、論理レプリケーションが有効になっている場合は、トランザクションの長期実行を避けてください。代わりに、トランザクションをいくつかの小さなトランザクションに分割します。

  • ARRAY データ型を持つテーブルにはプライマリキーが必要です。ARRAY データ型にプライマリキーがないテーブルは、フルロード中に中断されます。

  • AWS DMS では、パーティション分割されたテーブルのレプリケーションはサポートされていません。パーティション分割されたテーブルが検出された場合、以下の状況が発生します。

    • エンドポイントは、親テーブルと子テーブルのリストを報告します。

    • AWS DMS は、ターゲットのテーブルを、選択したテーブルと同じプロパティを持つ通常のテーブルとして作成します。

    • ソースデータベースの親テーブルに子テーブルと同じプライマリキー値がある場合、「重複するキー」エラーが生成されます。

  • パーティション分割されたテーブルを PostgreSQL ソースから PostgreSQL ターゲットにレプリケートするには、まずターゲットで親テーブルと子テーブルを手動で作成します。次に、それらのテーブルにレプリケートする別個のタスクを定義します。その場合、タスク設定を [] に設定します。ロードする前に切り捨てる

  • PostgreSQL NUMERIC データ型はサイズが固定されていません。NUMERIC データ型ですが、精度とスケールがないデータを転送する場合、DMS はデフォルトで NUMERIC(28,6) (精度が 28、スケールが 6) を使用します。たとえば、ソースからの値 0.611111104488373 は、PostgreSQL ターゲットの 0.611111 に変換されます。

  • CDC はソースとして Aurora PostgreSQL サーバーレスではサポートされていません。

  • AWS DMSは、coalesce 関数で作成された一意のインデックスを持つテーブルのレプリケーションをサポートしていません。

PostgreSQL のソースデータ型

次の表に、AWS DMS を使用する場合にサポートされる PostgreSQL のソースデータ型と、AWS DMS のデータ型とのデフォルトマッピングを示します。

ターゲットにマッピングされるデータ型を表示する方法については、使用しているターゲットエンドポイントのセクションを参照してください。

AWS DMS のデータ型の詳細については、「のデータ型AWSDatabase 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

BYTEA

BLOB

TIMESTAMP

DATETIME

TIMESTAMP (z)

DATETIME

TIMESTAMP WITH TIME ZONE

DATETIME

DATE

DATE

TIME

TIME

TIME (z)

TIME

INTERVAL

文字列 (128) —1 年、2 ヶ月、3 日、4 時間、5 分、6 秒

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)

PostgreSQL 用の LOB ソースデータ型を使用する

PostgreSQL の列サイズは、PostgreSQL LOB データ型の AWS DMS データ型への変換に影響します。これを使用するには、次の AWS DMS データ型で以下の手順を実行します。

  • BLOB — セットLOB サイズを以下に制限するザ・最大 LOB サイズ (KB)タスク作成時の値。

  • CLOB — レプリケーションは各文字を UTF8 文字として処理します。次に、列で最長の文字テキストの長さを求めます。max_num_chars_text。この長さを使用して、の値を指定します。LOB サイズを以下に制限する。データに 4 バイト文字が含まれている場合には、2 倍にして [Limit LOB size to (LOB サイズ制限)] 値をバイト単位で指定します。この場合、[Limit LOB size to (LOB サイズ制限)] は max_num_chars_text の 2 乗と等しくなります。

  • NCLOB — レプリケーションは各文字を 2 バイト文字として処理します。次に、列で最長の文字テキストの長さを見つけます (max_num_chars_text)、2を掛ける。これは、の値を指定するために行います。LOB サイズを以下に制限する。この場合、[Limit LOB size to (LOB サイズ制限)] は max_num_chars_text の 2 乗と等しくなります。データに 4 バイト文字が含まれている場合は、再度 2 倍にします。この場合、[Limit LOB size to (LOB サイズ制限)] は max_num_chars_text の 4 乗と等しくなります。