論理レプリケーションスロットを介して先読みログストリームを照会できます。
まず、あなたはパラメータのカップルを変更し、変更が行われるようにするために、サーバーを再起動する必要があります。
postgres=# alter system set wal_level = logical;
postgres=# alter system set max_replication_slots = 1;
そして、(再起動後)あなたがスロットを作成する必要があります。
postgres=# SELECT * FROM pg_create_logical_replication_slot('slot', 'test_decoding');
slot_name | xlog_position
-----------+---------------
slot | 2E/839F3300
(1 row)
ここで、test_decoding
はログレコード(バイナリ)を何らかのテキスト表現に変換するための出力プラグイン名です。
残念ながら
postgres=# SELECT * FROM pg_logical_slot_get_changes('slot', NULL, NULL);
location | xid | data
-------------+-------+--------------
2E/83A0BA48 | 80243 | BEGIN 80243
2E/83A1D2B8 | 80243 | COMMIT 80243
(2 rows)
、今あなたはDDLをデコードすることはできませんので、あなただけのBEGINとENDます:
その後
postgres=# create table product(id serial, val json);
CREATE TABLE
今、あなたはWALストリームを照会することができます...のは、テーブルを作成してみましょう。 Xid
フィールドはトランザクション番号を表します。
しかしさんが何かを挿入してみましょう...
postgres=# insert into product(val) values ('{"desc":"aaa"}');
INSERT 0 1
今再びストリームを照会:
ここ
postgres=# SELECT * FROM pg_logical_slot_get_changes('slot', NULL, NULL);
location | xid | data
-------------+-------+------------------------------------------------------------------------
2E/83A1D3C0 | 80244 | BEGIN 80244
2E/83A1D3C0 | 80244 | table public.product: INSERT: id[integer]:1 val[json]:'{"desc":"aaa"}'
2E/83A1D440 | 80244 | COMMIT 80244
(3 rows)
を使用すると、テーブル名や挿入された値を見ることができます。
更新文で同じ
:あなたは
pg_logical_slot_get_changes
関数を使用してストリームからいくつかの変更を「消費」した後、再度同じ変更を照会することはできませんことを
postgres=# update product set val = '{"desc":"bbb"}';
UPDATE 1
postgres=# SELECT * FROM pg_logical_slot_get_changes('slot', NULL, NULL);
location | xid | data
-------------+-------+------------------------------------------------------------------------
2E/83A1D560 | 80245 | BEGIN 80245
2E/83A1D560 | 80245 | table public.product: UPDATE: id[integer]:1 val[json]:'{"desc":"bbb"}'
2E/83A1D5E8 | 80245 | COMMIT 80245
(3 rows)
注意。
ドロップスロットあなたはもうそれを必要とする場合:
postgres=# SELECT pg_drop_replication_slot('slot');
pg_drop_replication_slot
--------------------------
(1 row)
あなたは理論的なデコードin the documentationについての詳細を読むことはできません。
いいえ、そのようなものは内蔵されていません。おそらく監査トリガーを探しているでしょう:http://okbob.blogspot.de/2015/01/most-simply-implementation-of-history.htmlまたはhttp://8kb.co.uk/blog/2015/01/19/copy-pavel-stehules-simple-history-table-but-the-jsonb-type/ –
これは私が望んでいたものではありませんが、実装するのには簡単です。ありがとう! –