PostgreSQL Change Data Capture (CDC) コネクタを使用する前に、アップストリーム PostgreSQL データベースが特定の要件を満たす必要があります。このトピックでは、ApsaraDB RDS for PostgreSQL、Amazon RDS for PostgreSQL、および自主管理 PostgreSQL データベースに必要な構成について説明します。
背景情報
PostgreSQL CDC コネクタを使用する前に、必要な構成を実行する必要があります。PostgreSQL CDC コネクタは、PostgreSQL の論理サブスクリプションメカニズムに基づいてデータを同期します。詳細については、「Logical Decoding Concepts」および「論理サブスクリプションの原則とベストプラクティス」をご参照ください。
ApsaraDB RDS for PostgreSQL
ApsaraDB RDS for PostgreSQL と Ververica Platform(VVP)間のネットワーク接続
ApsaraDB RDS for PostgreSQL インスタンスと VVP が同じ VPC とリージョンにある場合、相互に接続できます。
ApsaraDB RDS for PostgreSQL インスタンスと VVP が異なるネットワークにある場合は、VPN Gateway などのサービスを使用して、それらの間にネットワーク接続を確立する必要があります。詳細については、「フルマネージド Flink はどのようにインターネットにアクセスしますか?」および「フルマネージド Flink はどのように VPC をまたいでサービスにアクセスしますか?」をご参照ください。
VVP がインスタンスにアクセスできるように、ApsaraDB RDS for PostgreSQL インスタンスの IP アドレスホワイトリストを設定する必要があります。詳細については、「IP アドレスホワイトリストの設定」をご参照ください。
ApsaraDB RDS for PostgreSQL サーバーの構成
制限事項
PostgreSQL バージョン 10、11、12、13、14、15、および 16 からのみデータを同期できます。
select version()コマンドを実行して PostgreSQL のバージョンを確認できます。論理デコード
wal_level パラメーターを logical に設定して、論理デコーディングを有効にします。詳細については、「ApsaraDB RDS for PostgreSQL インスタンスのパラメーターを変更する」をご参照ください。パラメーターを設定した後、「論理デコーディング」ドキュメントの例に従って、この機能をテストして使用できます。
同期するテーブルの `REPLICA IDENTITY` が `FULL` に設定されていることを確認してください。
次の SQL 文を実行して、パラメーターを表示および変更できます。
-- View the REPLICA IDENTITY. SELECT CASE relreplident WHEN'd'THEN'default' WHEN'n'THEN'nothing' WHEN'f'THEN'full' WHEN'i'THEN'index' ENDASreplica_identity FROMpg_class WHEREoid='mytablename'::regclass; -- Modify the REPLICA IDENTITY. ALTERTABLEmytablenameREPLICAIDENTITYFULL;
データ同期プラグイン
wal2json または pgoutput 論理デコーディングプラグインを使用できます。wal2json プラグインは、RDS for PostgreSQL バージョン 11、12、および 13 のみをサポートします。pgoutput プラグインには PostgreSQL 10 以降が必要です。pgoutput および decodebuf プラグインが推奨されます。詳細については、「Postgres CDC (パブリックプレビュー)」の
decoding.plugin.nameパラメーターをご参照ください。説明pgoutput プラグインを使用してデータを同期する場合は、使用するアカウントが特権アカウントであることを確認してください。詳細については、「アカウントの作成」をご参照ください。
Amazon RDS for PostgreSQL
Amazon RDS for PostgreSQL と VVP 間のネットワーク接続
VVP がインターネット経由で Amazon RDS for PostgreSQL インスタンスにアクセスできるようにする必要があります。詳細については、「フルマネージド Flink はどのようにインターネットにアクセスしますか?」および「セキュリティグループによるアクセスの制御」をご参照ください。
Amazon RDS for PostgreSQL サーバー構成
バージョンの制限
PostgreSQL バージョン 10、11、12、13、14、15、および 16 からのみデータを同期できます。
select version()コマンドを実行して PostgreSQL のバージョンを確認できます。論理デコード
`rds.logical_replication` パラメーターを 1 に設定します。
`wal_level` パラメーターが `logical` に設定されていることを確認してください。デフォルトでは、`rds.logical_replication` が 1 に設定されている場合、`wal_level` は自動的に `logical` に設定されます。
同期するテーブルの `REPLICA IDENTITY` が `FULL` に設定されていることを確認してください。
次の SQL 文を実行して、パラメーターを表示および変更できます。
-- View the REPLICA IDENTITY. SELECTCASErelreplident WHEN'd'THEN'default' WHEN'n'THEN'nothing' WHEN'f'THEN'full' WHEN'i'THEN'index' ENDASreplica_identity FROMpg_class WHEREoid='mytablename'::regclass; -- Modify the REPLICA IDENTITY. ALTERTABLEmytablenameREPLICAIDENTITYFULL;アカウントロールの要件
デフォルトでは、Amazon RDS for PostgreSQL 上で `rds_replication` ロールを持つのは Amazon Web Services (AWS) の管理アカウントのみです。このロールにより、ユーザーは論理スロットを管理し、そこからデータをストリーミングできます。管理アカウント以外のアカウントを使用して論理レプリケーションを有効にするには、そのアカウントに `rds_replication` ロールを割り当てる必要があります。たとえば、`rds_replication` ロールを <my_user> に割り当てることができます。ユーザーに `rds_replication` ロールを付与するには、スーパーユーザー権限が必要です。管理アカウント以外のアカウントを使用して初期スナップショットを作成するには、キャプチャ対象のテーブルに対する `SELECT` 権限をそのアカウントに付与する必要があります。
データ同期プラグイン
データ同期には pgoutput プラグインを使用する必要があります。
自主管理 PostgreSQL
自主管理 PostgreSQL と VVP 間のネットワーク接続
自主管理 PostgreSQL データベースが VVP と同じ VPC およびリージョン内の Alibaba Cloud にデプロイされている場合、それらは相互に接続できます。
自主管理 PostgreSQL データベースが Alibaba Cloud 上にない場合、VVP がアクセスできるパブリック IP アドレスが必要です。VPN Gateway を使用してデータベースと VVP を接続できます。詳細については、「フルマネージド Flink はどのようにインターネットにアクセスしますか?」をご参照ください。また、VVP が PostgreSQL にアクセスできるように `pg_hba.conf` ファイルを変更する必要もあります。詳細については、「pg_hba.conf ファイルの更新」をご参照ください。
PostgreSQL サーバーの構成
制限事項
PostgreSQL バージョン 9.6、10、11、12、13、14、15、および 16 からのみデータを同期できます。
select version()コマンドを実行して PostgreSQL のバージョンを確認できます。論理デコード
`wal_level` パラメーターが `logical` に設定されていることを確認してください。これを行うには、`postgresql.conf` ファイルを変更してデータベースを再起動する必要があります。
同期するテーブルの `REPLICA IDENTITY` が `FULL` に設定されていることを確認してください。
次の SQL 文を実行して、パラメーターを表示および変更できます。
-- View the REPLICA IDENTITY. SELECT CASE relreplident WHEN 'd' THEN 'default' WHEN 'n' THEN 'nothing' WHEN 'f' THEN 'full' WHEN 'i' THEN 'index' END AS replica_identity FROM pg_class WHERE oid = 'mytablename'::regclass; -- Modify the REPLICA IDENTITY. ALTER TABLE mytablename REPLICA IDENTITY FULL;同期権限を持つアカウントの作成
データ同期アカウントには、`REPLICATION` および `LOGIN` 権限と、同期するテーブルに対する `SELECT` 権限が必要です。
CREATE ROLE <replication_user> REPLICATION LOGIN; -- レプリケーションユーザーを作成し、REPLICATION と LOGIN 権限を付与 GRANT SELECT ON <table_name> TO <name>; -- 指定されたテーブルに対する SELECT 権限を指定されたユーザーに付与
データ同期プラグイン
pgoutput プラグインは、PostgreSQL 10 以降にデフォルトでインストールされています。他のバージョン、または他のプラグインをインストールするには、「PostgreSQL 用の出力プラグインのインストール」をご参照ください。
pgoutput プラグインを使用する場合は、アカウントが同期するテーブルのオーナーであることを確認してください。次のステップを実行して、アカウントをオーナーとして設定できます。
-- 1. Create a synchronization group. CREATE ROLE <replication_group>; -- 2. Add the original table owner to the synchronization group. GRANT REPLICATION_GROUP TO <original_owner>; -- 3. Add the synchronization account to the synchronization group. GRANT REPLICATION_GROUP TO <replication_user>; -- 4. Transfer ownership to the synchronization group. ALTER TABLE <table_name> OWNER TO REPLICATION_GROUP;説明この場合、同期アカウントは単一のテーブルのオーナーにすぎません。したがって、`WITH` 句で、debezium.publication.autocreate.mode パラメーターを `filtered` に設定する必要があります。各テーブルの権限設定が複雑すぎる場合は、`pg_monitor` 権限を同期アカウントに直接付与できます。
GRANT pg_monitor TO <replication_user>; -- replication_user に pg_monitor 権限を付与