RDS PostgreSQL は、論理ログファイルを JSON フォーマットで出力して簡単に表示できる wal2json プラグインを提供します。
前提条件
インスタンスは RDS PostgreSQL 10 以降です。
RDS PostgreSQL 16 の場合、マイナーバージョンは 20240830 以降である必要があります。
説明RDS PostgreSQL 17 は現在このプラグインをサポートしていません。
インスタンスパラメーター wal_level が logical に設定されています。詳細については、「インスタンスパラメーターの設定」をご参照ください。
背景情報
wal2json は、INSERT および UPDATE 操作によって生成されたタプルにアクセスし、WAL の内容を解析できる論理デコーディングプラグインです。
wal2json プラグインは、各トランザクションに対して JSON オブジェクトを生成します。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');
説明出力を停止してリソースを解放するには、次のコマンドを実行します:
SELECT 'stop' FROM pg_drop_replication_slot('test_slot');