Open15
DB

PostgreSQL Write-Ahead Logging (WAL) ファイルは、マスター上のすべての変更を読み込んだ後、ローカルに適用するリードレプリカに公開されます。リードレプリカからデータを読み取る代わりに、wal2json 出力プラグインを用いた論理デコードを使用して、WAL の内容を直接デコードします。プラグインはこの GitHub リポジトリからダウンロードできます。論理デコードとは、データベースのテーブルに対するすべての持続的な変更を、一貫性がありかつ分かりやすい形式に抽出するプロセスのことです。この形式だと、データベースの内部状態を詳細に把握していなくても解釈することが可能です。

postgres> show wal_level;
+-------------+
| wal_level |
|-------------|
| logical |
+-------------+
postgres> show max_replication_slots;
+-------------------------+
| max_replication_slots |
|-------------------------|
| 5 |
+-------------------------+
REPLICATION 権限を持つユーザーを作成する
postgres> create user repluser password 'replpass';
postgres> grant rds_replication to repluser;

ALTER SYSTEM SET wal_level = logical; を実行して、再起動する

SELECT * FROM pg_publication;
CREATE PUBLICATION flow_publication;

pg_logical_slot_get_changes 取得すると消える
pg_logical_slot_peek_changes 消えない

SELECT pg_create_logical_replication_slot('publication', 'wal2json');
SELECT pg_create_logical_replication_slot('publication', 'pgoutput');
SELECT pg_create_logical_replication_slot('publication', 'test_decoding');
SELECT * FROM pg_replication_slots;
SELECT pg_drop_replication_slot('publication');
SELECT * FROM pg_logical_slot_get_changes('publication', NULL, NULL);