有効化手順
postgresql.confを書き換えて再起動します。
wal_level = logical # minimal, replica, or logical
max_replication_slots = 10 # max number of replication slots
AzureのFlexible Serverでも設定可能です。
Logicalレプリケーション用のスロットを作ります。
SELECT * FROM pg_create_logical_replication_slot('rep_slot', 'test_decoding');
使い方
- pg_logical_slot_get_changes 変更情報を取り出す。取ると消える
- pg_logical_slot_peek_changes 変更情報を取り出さずにチェックする。消えない
引数は同じ
- 読み出し先の論理レプリケーション・スロットの名前
- 読み出しを終えるポイント(トランザクションログのIDであるLSN、もしくは行数で指定)
- 出力プラグインのオプションをkeyとvalueで指定
動作確認
2行INSERTした場合
INSERT INTO test (id, name) VALUES (7, '7');
INSERT INTO test (id, name) VALUES (8, '8');
複数行の一括更新の場合
テーブルに6件のレコードが入っている状態でUpdateを行う。
UPDATE test SET name = '1234'
行ごとのデータになった。
SELECT * FROM pg_logical_slot_get_changes('rep_slot', NULL, NULL);
カラム追加
ALTER TABLE test ADD COLUMN num bigint;
カラム追加。デフォルト値あり
ALTER TABLE test ADD COLUMN num_default_zero bigint DEFAULT 0 NOT NULL;
削除した場合
DELETE FROM test
便利なような、イレギュラー対応しずらいような…