PostgreSQLソース データベース取り込みとレプリケーション タスクでPostgreSQLソースを使用するには、最初にソースデータベースを準備し、使用に関する考慮事項を確認してください。
ソースの準備: データベース取り込みとレプリケーション タスクでPostgreSQLソースを使用するには、次のソース準備タスクを実行します。
Secure Agent システム上 で、オペレーティングシステムに適したODBCドライバをインストールします。
注: PostgreSQL ODBCドライバを使用する場合は、psqlODBCドライババージョン13.x以前を使用します。psqlODBC 15.xから、PostgreSQL ODBCドライバはOpenSSL 3.0.xを使用するように移行しましたが、これはデータ取り込みおよびレプリケーションが使用しているOpenSSL 1.1.xバージョンと互換性がありません。
• Windowsでは、64ビットのPostgreSQL ODBCドライバをインストールします。1 PostgreSQL ODBCドライバをダウンロードしてインストールします。注: ソースデータベースにマルチバイト文字名のオブジェクト(テーブル名、カラム名、パブリケーション名など)が含まれている場合は、PostgreSQL Unicode ODBCドライバまたはPostgreSQL用DataDirect ODBCドライバのいずれかを使用する必要があります。この要件は、Amazon Aurora PostgreSQL、Azure Database for PostgreSQL - Flexible Server、Cloud SQL for PostgreSQL、およびRDS for PostgreSQLなどのすべてのPostgreSQLソースタイプに適用されます。Unicode互換のODBCドライバを使用しない場合、マルチバイト文字の名前が検出されると、増分ロードジョブは失敗します。
2 PGSQL_ODBC_DRIVER環境変数を、ODBC Data Source Administrator(64ビット)によって表示されるドライバ名に設定します。注: タスクウィザードの[ソース]ページでpwx.custom.pgsql_odbc_driverカスタムプロパティを設定することにより、データベース取り込みとレプリケーションタスクのこのドライバをオーバーライドできます。
• LinuxまたはUNIXでは、PostgreSQL用DataDirect ODBCドライバがLinuxインストールの一部として提供されます。unixODBCドライバマネージャかiODBCドライバマネージャ、またはPostgreSQL ODBCドライバをインストールすることもできます。1 Linuxインストールで提供されるDataDirect ODBC for PostgreSQLドライバを使用しない場合は、unixODBCドライバマネージャまたはiODBCドライバマネージャをインストールするか、PostgreSQL ODBCドライバをインストールします。注: ソースデータベースにマルチバイト文字名のオブジェクト(テーブル名、カラム名、パブリケーション名など)が含まれている場合は、PostgreSQL Unicode ODBCドライバまたはPostgreSQL用DataDirect ODBCドライバのいずれかを使用する必要があります。この要件は、Amazon Aurora PostgreSQL、Azure Database for PostgreSQL - Flexible Server、Cloud SQL for PostgreSQL、およびRDS for PostgreSQLなどのすべてのPostgreSQLソースタイプに適用されます。Unicode互換のODBCドライバを使用しない場合、マルチバイト文字の名前が検出されると、増分ロードジョブは失敗します。
2 PostgreSQLエントリをodbcinst.iniに追加します。[PGSQL] Description = ODBC for PostgreSQL Driver = Setup = Driver64 = /usr/pgsql-9.6/lib/psqlodbca.so Setup64 = /usr/lib64/libodbcpsqlS.so FileUsage = 1
3 オプション。以下の環境変数を設定します。▪ ODBCSYSINI変数をodbcinst.iniが配置されているディレクトリに設定します。odbcinst.iniがデフォルトの/etcディレクトリに配置されている場合は、ODBCSYSINI変数を設定する必要はありません。▪ PostgreSQL ODBCドライバがインストールされているディレクトリをLD_LIBRARY_PATH変数に追加します。ドライバが/usr/lib64のデフォルトディレクトリにインストールされている場合は、LD_LIBRARY_PATH変数にパスを追加する必要はありません。▪ PGSQL_ODBC_DRIVERパラメータを、odbcinst.iniで指定したドライバ名に設定します。例:
export ODBCSYSINI=/root/infaagent export LD_LIBRARY_PATH=/usr/pgsql-9.6/lib export PGSQL_ODBC_DRIVER=PGSQL
PostgreSQLデータベースシステム で、次の設定手順を実行します。
1 増分ロードジョブ、初期および増分ロードジョブの場合、PostgreSQL postgresql.conf構成ファイルでwal_level=logicalパラメータが指定されていることを確認します。このパラメータは、PostgreSQLがログ先行書き込み(WAL)に書き込む情報の量を決定します。論理の設定によって、論理デコードのサポートに必要な情報が追加されます。
Amazon Aurora PostgreSQLまたはAmazon RDS for PostgreSQLソースでwal_levelをlogicalに設定するには、クラスタパラメータグループでrds.logical_replicationパラメータを1に設定します。Azure Database for PostgreSQL - フレキシブル サーバ-の場合、Azureポータルの[サーバーパラメータ]ページでwal_levelパラメータをlogicalに設定します。
Cloud SQL for PostgreSQLソースの場合は、次のアクションを実行します。
a パブリックIPを使用してデータベースに接続します。注: Google Cloudコンソールの[承認済みネットワーク]に必要なIPを必ず追加してください。
b Cloud SQL for PostgreSQLデータベースインスタンスレプリカを作成します。c Cloud Shellで、ローカル管理者ユーザーとして次のコマンドを実行します。alter database postgres set default_transaction_read_only = off; gcloud sql connect database_replica --user=postgres --quiet; ALTER USER postgres WITH REPLICATION; CREATE USER replication_user WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'password '; ALTER USER postgres WITH REPLICATION;
d Google Cloudコンソールで、次のデータベースフラグを追加します:▪ cloudsql.logical_decoding 。値をon に設定します。▪ max_replication_slots .値を64 に設定します。▪ cloudsql.enable_pglogical .値をon に設定します。▪ max_wal_senders 。値を64 に設定します。e データベースインスタンスを再起動します。2 PostgreSQL用DataDirect ODBCドライバを使用する場合は、データベースでSCRAM-SHA-256認証方法を使用していないことを確認してください。MD5などの別の認証方法を使用します。注: PostgreSQL ODBCドライバは、SCRAM-SHA-256認証方法をサポートしています。PostgreSQL 13では、この認証方法がデフォルトの方法になりました。
3 PostgreSQLソースを含むデータベース取り込みとレプリケーション タスクをデプロイして実行するには、ソース接続で、必要な特権を持つデータベースユーザーを指定する必要があります。次の方法でユーザーを作成し、そのユーザーに特権を付与します。- 初期ロードジョブの場合は、次のSQL文を使用します。CREATE USER dbmi_user WITH PASSWORD 'password '; GRANT SELECT ON ALL TABLES IN SCHEMA schema TO dbmi_user ;
- オンプレミスのPostgreSQLソースを使用する増分ロードジョブ、初期および増分ロードジョブの場合、次のSQL文を使用します。CREATE USER dbmi_user WITH PASSWORD 'password ' REPLICATION;
Amazon Aurora PostgreSQLソースとRDS for PostgreSQLソースの場合、次の文を使用します。
CREATE USER dbmi_user WITH PASSWORD 'password '; GRANT rds_replication to dbmi_user ;
また、pgoutputプラグインを使用する場合は、次のSQL文を使用して、pgoutputパブリケーションに追加するデータベース内のテーブルの所有権を、作成したdbmi_user に付与します。
GRANT CREATE ON DATABASE database TO dbmi_user ;
4 増分ロードジョブ、または初期および増分ロードジョブの論理デコード出力にwal2jsonプラグインを使用する場合は、プラグインをインストールします。5 増分ロードジョブ、または初期および増分ロードジョブにpgoutputプラグインを使用する場合は、次のSQL文を使用して、データベース取り込みジョブのパブリケーションを作成します。CREATE PUBLICATION publication_name [FOR TABLE [ONLY] table_name [*] [,...] | FOR ALL TABLES ];
ターゲットにレプリケートするすべてのテーブルがパブリケーションに含まれていることを確認してください。
6 増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブの場合は、次の関数を使用してPostgreSQL論理レプリケーションスロットを作成します。SELECT pg_create_logical_replication_slot('slot_name' , 'plugin_type' );
ここで、plugin_type はpgoutputプラグインまたはwal2jsonプラグインのどちらかです。
注: PostgreSQLレプリカデータベースから変更データをキャプチャする場合は、必ずレプリカにレプリケーションスロットを作成してください。
7 増分ロードジョブ、初期および増分ロードジョブの場合、postgresql.conf構成ファイルのmax_replication_slotsパラメータの値が、使用する予定の同時データベース取り込みジョブの数以上であることを確認します。重要: すべてのレプリケーションスロットは、すべての同時ジョブで一意である必要があります。
8 増分ロードジョブ、初期および増分ロードジョブの場合、PostgreSQLソースがUTF-8エンコードを使用していることを確認します。9 PostgreSQLソースがUTF-8エンコーディングを使用していることを確認します。ソースデータベースに別のエンコードを使用すると、初期ロードジョブ、増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブが失敗する可能性があります。使用に関する考慮事項: • データベース取り込みとレプリケーション では、任意のロードタイプを使用しているデータベース取り込みとレプリケーション ジョブで、PostgreSQLソースのタイプとしてオンプレミスPostgreSQL、Amazon Aurora PostgreSQL、Azure Database for PostgreSQL - Flexible Server、Cloud SQL for PostgreSQL、およびRDS PostgreSQLがサポートされます。• データベース取り込みとレプリケーション ジョブは、Cloud SQL for PostgreSQLソースと、Google BigQueryまたはSnowflakeターゲットのみをサポートします。オンプレミスのPostgreSQLソースの場合、サポートされている任意のターゲットタイプを使用できます。• 任意のロードタイプのデータベース取り込みとレプリケーション ジョブは、PostgreSQLレプリカデータベースをソースとして使用できます。この場合、レプリカにレプリケーションスロットを定義する必要があります。プライマリデータベースに対して、他の設定手順を通常どおり実行します。• データベース取り込みとレプリケーション では、ソーステーブルの各行が一意であることを想定しているため、各ソーステーブルにプライマリキーを持たせることをお勧めします。データベース取り込みとレプリケーション は、プライマリキーの代わりに一意のインデックスを許可しません。プライマリキーが指定されていない場合、データベース取り込みとレプリケーション はすべてのカラムをプライマリキーの一部であるかのように扱います。• データベース取り込みとレプリケーション は、データベース取り込みとレプリケーション の増分ロードジョブ、初期ロードと増分ロードの組み合わせジョブでPostgreSQLソースのスキーマドリフトオプションをサポートしますが、次の制限があります。- PostgreSQLは、変更データキャプチャが有効になっているテーブルのプライマリキーの変更をサポートしていません。- データベース取り込みとレプリケーション ジョブは、テーブルパーティションIDが変更されたソーステーブルからのDML変更をキャプチャできません。レプリカデータベースを持つPostgreSQLプライマリデータベースでスキーマドリフトを有効にすると、レプリカは、プライマリデータベースに加えられた、選択したスキーマドリフトDDL変更との同期が維持された状態になります。
• データベース取り込みとレプリケーション では、PostgreSQLソースを含む増分ロードジョブで生成されたカラムはサポートされていません。生成されたカラムがソーステーブルに含まれている場合、変更データキャプチャはそれらのカラムを無視し、残りのカラムの処理を続行します。• 複数のエージェントが含まれるSecure Agentグループを使用していて、アクティブなエージェントが予期せずダウンした場合、データベース取り込みとレプリケーション ジョブは、Secure Agentグループ内の別の使用可能なエージェントに自動的に切り替えることができます。自動スイッチオーバーは、15分のハートビート間隔が経過した後に行われます。PostgreSQLソースを持つデータベース取り込みとレプリケーション ジョブの場合、自動スイッチオーバーに次の制限があります。- ジョブで永続ストレージを有効にすることはできません。- Kafkaターゲットを持つジョブでは、チェックポイント情報をKafkaヘッダーに格納する必要があります。2025年7月リリースより前に存在していたジョブの場合、チェックポイント情報はSecure Agentのチェックポイントファイルに格納されるため、自動スイッチオーバーを実行できません。- PostgreSQL接続に読み取り専用レプリカを使用する場合、タスク設定ウィザードの[タスクの詳細] ソースページでreaderPostgreSQLShouldDisableLocalPersistentカスタムプロパティをfalseに設定する必要があります。• 増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブの場合、データベース取り込みとレプリケーション はレプリケーションスロットデータをパブリックスキーマ内のPostgreSQLデータベーステーブルに即座に保存し、対応するDML変更がターゲットに正常に書き込まれたことの確認を受け取った後にのみ、永続化された行を削除します。永続テーブルがまだ存在していない場合は作成されます。再起動操作の時点で存在している必要があります。テーブルの構造はレプリケーションプラグインタイプによって異なり、pgoutputスロットにはバイナリデータ型のカラム、wal2jsonスロットにはテキストデータ型のカラムが含まれます。• タスクウィザードの[ソース] ページの[詳細] で[LOBを含める] を選択した場合、データベース取り込みとレプリケーション ジョブで、PostgreSQL BYTEA、JSON、JSONB、TEXT、およびXMLカラムからデータをレプリケートできます。タスクウィザードの[ソース] ページで、pwx.custom.pgsql_enable_lobsカスタムプロパティをtrueに設定した場合、データベース取り込みとレプリケーション の増分ロードジョブ、初期ロードと増分ロードの組み合わせジョブは、長さ制限のないTEXT、XML、BIT VARYING、およびCHARACTER VARYINGカラムからデータをレプリケートできます。増分ロードジョブ、初期および増分ロードジョブも常に、BYTEA、JSON、およびJSONBカラムからデータをレプリケートします。
LOBカラムデータは、LOBタイプとターゲットタイプによって異なるバイト制限よりもサイズが大きい場合、ターゲットに書き込まれる前に切り詰められます。詳細については、
PostgreSQLソースの設定 を参照してください。
• 初期ロードジョブの場合、データベース取り込みとレプリケーション では次のPostgreSQLデータ型はサポートされていません。- ABSTIME- 配列型- NAME- オブジェクト識別子型- PG_LSN- RELTIME- テキスト検索型:- ユーザー定義型増分ロードジョブ、初期ロードと増分ロードの組み合わせジョブの場合、データベース取り込みとレプリケーション では、初期ロードジョブでサポートされていないものに加えて、次のPostgreSQLデータ型はサポートされていません。
- 空間タイプ▪ Box▪ Circle▪ Line▪ LSeg▪ Path▪ Point▪ Polygon- 無制限のさまざまなタイプデータベース取り込みとレプリケーション ジョブは、これらのデータ型を持つカラムにはデプロイしたりnullをプロパゲートしたりすることはできません。
サポートされているPostgreSQLデータ型からターゲットタイプへのデフォルトのマッピングについては、
デフォルトのデータ型マッピング を参照してください。
• ターゲットテーブルに存在しないレコードに対してPostgreSQLソーステーブルのプライマリキー値を更新すると、そのレコードはターゲットにレプリケートされません。ただし、監視インタフェースは更新カウントを増分してプライマリキーの更新を含めます。プライマリキーの更新が実行される前にターゲットテーブルにレコードが存在する場合にのみ、データがターゲットにレプリケートされます。• PostgreSQLソースを持つデータベース取り込みおよびレプリケーションの増分ロードジョブと組み合わせロードジョブの場合、アンロードフェーズでパーティション化が有効になっており、ソースのプライマリキーにboolean、cidr、inet、int4range、int8range、interval、macaddr、macaddr8、uuidのいずれかのデータ型のカラムが含まれている場合、初期アンロード処理は失敗します。• PostgreSQLのパーティションテーブルには次の制限が適用されます。pgoutputレプリケーションスロットを、publish_via_partition_root=TRUEパラメータで設定したパブリケーションとともに使用している場合、次の例外が適用されます。
- 実行時に作成またはアタッチされたパーティションは、進行中のDML変更については監視の対象です。