RDS for PostgreSQL は、論理ログファイルを JSON 形式で出力するための wal2json プラグインを提供します。
前提条件
-
インスタンスは、RDS for PostgreSQL 10 以降である必要があります。
RDS for PostgreSQL 16 の場合、マイナーバージョンは 20240830 以降である必要があります。
説明現在、RDS for PostgreSQL 17 はこのプラグインをサポートしていません。
-
インスタンスパラメータ
wal_levelをlogicalに設定する必要があります。詳細については、「インスタンスパラメータの設定」をご参照ください。
背景情報
wal2json は、WAL を解析し、INSERT 操作および UPDATE 操作で生成されたタプルにアクセスするための論理デコーディングプラグインです。
wal2json プラグインは、トランザクションごとに JSON オブジェクトを生成します。このオブジェクトには、すべての新しいタプルと古いタプルが含まれます。また、トランザクションのタイムスタンプ、スキーマ、データ型、トランザクション ID などの追加プロパティを含めることもできます。詳細については、「SQL を使用した JSON オブジェクトの取得」をご参照ください。
SQL を使用した JSON オブジェクトの取得
-
次のコマンドを実行して、テーブルを作成し、プラグインを初期化します。
CREATE TABLE table2_with_pk (a SERIAL, b VARCHAR(30), c TIMESTAMP NOT NULL, PRIMARY KEY(a, c)); CREATE TABLE table2_without_pk (a SERIAL, b NUMERIC(5,2), c TEXT); SELECT 'init' FROM pg_create_logical_replication_slot('test_slot', 'wal2json');説明wal2json プラグインは
CREATE EXTENSIONを使用して作成する必要はありません。代わりに、論理レプリケーションスロットを介してプラグインをロードし、使用します。 -
次のコマンドを実行して、データを変更します。
BEGIN; INSERT INTO table2_with_pk (b, c) VALUES('Backup and Restore', now()); INSERT INTO table2_with_pk (b, c) VALUES('Tuning', now()); INSERT INTO table2_with_pk (b, c) VALUES('Replication', now()); DELETE FROM table2_with_pk WHERE a < 3; INSERT INTO table2_without_pk (b, c) VALUES(2.34, 'Tapir'); UPDATE table2_without_pk SET c = 'Anta' WHERE c = 'Tapir'; COMMIT; -
次のコマンドを実行して、ログデータを JSON 形式で出力します。
SELECT data FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'pretty-print', '1');このコマンドは、WAL ログデータを JSON 形式で返します。このデータには、
"kind": "insert"、"schema": "public"、"table": "table2_with_pk"、"columnnames": ["a", "b", "c"]、"columntypes": ["integer", "character varying(30)", "timestamp without time zone"]などのフィールドが含まれており、ターゲットテーブルに対する挿入操作の詳細が示されます。説明出力を停止してリソースを解放するには、次のコマンドを実行します。
SELECT 'stop' FROM pg_drop_replication_slot('test_slot');