CDCデータ転送 - 転送元 - PostgreSQL

Prev Next

本ページでは、CDCデータ転送における転送元 - PostgreSQLについて説明します。
接続に関する設定については、PostgreSQL接続情報を参照ください。

対応バージョン

PostgreSQLの論理レプリケーションの仕組みを利用するため、PostgreSQL 10以降が必要です。

用語の説明

WAL(Write-Ahead Log)

WAL(Write-Ahead Log)は、トランザクション処理を行う前にその内容が記録されたログのことです。
TROCCOでは、PostgreSQLの論理レプリケーション機能を利用し、WALから論理デコードされた変更イベント(INSERT/UPDATE/DELETE)を受け取ることで、CDCデータ転送を実現しています。

パブリケーション

パブリケーションは、PostgreSQLの論理レプリケーションの対象とするテーブルや操作を定義する仕組みです。

レプリケーションスロット

レプリケーションスロットは、論理レプリケーションにおいてレプリカ側が読み取ったデータの位置を管理する仕組みです。
レプリカ側が受け取っていないWALは削除されないよう制御するなどの役割があります。

利用上の注意・制約

  • WAL(Write-Ahead Log)の論理デコーディングの出力プラグインにはpgoutputのみ対応しています。
  • 転送設定ごとに、のちに記載する手順に従いご自身でPostgreSQLのパブリケーションおよびレプリケーションスロットを作成していただく必要があります。
  • サーバー側のWALはTROCCOがWALを読み取るまで保存されるため、以下を推奨します。
    • DBのストレージに余裕を持たせたり、ストレージ容量を監視する
    • データ転送を定期実行する
  • ビューの取得には対応していません。
  • UPDATE・INSERT・DELETE操作のみが転送対象となります。

事前準備

必須パラメーター設定

PostgreSQLの設定ファイル (postgresql.conf) のパラメーターを変更する必要があります。

設定ファイルの変更が反映されない場合は

設定ファイルの変更が反映されない場合は、データベースを再起動してください。

パラメーター 説明
wal_level 必ずlogicalを指定してください。PostgreSQLで論理レプリケーションを利用する際に必須となります。
max_wal_senders WALの変更を処理するプロセス数の最大値を指定します。
対象のWALを取得するクライアントが1つだけ(TROCCOのCDC転送設定1件のみ)の場合は、1以上の数値であれば問題ありません。
max_replication_slots サーバーが利用できるレプリケーションスロットの最大値を指定します。
対象のWALを取得するクライアントが1つだけ(TROCCOのCDC転送設定1件のみ)の場合は、1以上の数値であれば問題ありません。

クラウドサービス特有の設定

Amazon RDS for PostgreSQLの場合

Amazon Aurora PostgreSQLの場合

Cloud SQL for PostgreSQLの場合

パブリケーション作成

PostgreSQLにREPLICATION権限を持つユーザーでログインし、パブリケーションを作成します。

CREATE PUBLICATION trocco_cdc FOR TABLE スキーマ名.テーブル名;
パブリケーションに含める対象について

不要なWALの増大を防ぐため、パブリケーションに含める対象は、転送対象とするテーブル・カラムのみを推奨します。
パブリケーションに含まれていないテーブルやカラムのデータは転送対象外となります。

レプリケーションスロットの作成

PostgreSQLにREPLICATION権限を持つユーザーでログインし、レプリケーションスロットを作成します。

SELECT PG_CREATE_LOGICAL_REPLICATION_SLOT('レプリケーションスロット名', 'pgoutput');

CDC転送において、レプリケーションスロットは転送先ごとに用意する必要があります。
レプリケーションスロットを他の転送設定などと共有した場合、データが欠損する可能性があります。

接続ユーザーの権限

PostgreSQL接続情報に利用するユーザーに対して、以下の権限を付与する必要があります。

  • USAGE
  • SELECT
  • REPLICATION
  • ALTER DEFAULT PRIVILEGES
  • (Amazon RDSの場合)rds_replication

以下は、PostgreSQLで対象ユーザーに権限を付与するサンプルクエリです。

GRANT USAGE ON SCHEMA <schema_name> TO <username>
GRANT SELECT ON <schema_name>.<table_name> TO <username>
ALTER USER <username> WITH REPLICATION;
ALTER DEFAULT PRIVILEGES IN SCHEMA <schema_name> GRANT SELECT ON TABLES TO <username>

トラブルシューティング

WALディスク消費が増大する

パブリケーションに含まれるテーブルのトランザクション量が少ない場合、レプリケーションスロットのLSN(Log Sequence Number)が進まず、古いWALファイルがディスク上に蓄積され続ける可能性があります。
上記の場合、トランザクション量の多いテーブルをパブリケーションに追加した上で、CDC転送のスキーマ設定にて対象テーブルを転送対象から外してください。