pg_logical_slot_peek_binary_changes()

一个以 bytea 格式显示逻辑复制槽中可用更改的函数

pg_logical_slot_peek_binary_changes() 是一个系统函数,它返回指定逻辑复制槽中的一组指定更改,但不使用它们,这意味着可以再次检索同一组更改。每个更改的内容都作为 bytea 返回。

pg_logical_slot_peek_binary_changes()PostgreSQL 9.4 中添加。

用法

pg_logical_slot_peek_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) →
        setof record ( lsn pg_lsn, xid xid, data text )

返回的更改集将从复制槽的当前 restart_lsn 值开始。

如果 upto_lsnupto_nchanges 都为 NULL,则将返回直到可用 WAL 结束的所有更改。

options 参数允许提供与逻辑复制槽关联的输出插件定义的选项。

要检索更改并推进复制槽,请使用 pg_logical_slot_get_binary_changes()pg_logical_slot_get_changes()

更改历史记录

示例

使用指定为插件的 test_decoding 创建一个逻辑复制槽

postgres=# SELECT * FROM pg_create_logical_replication_slot('test_slot_1', 'test_decoding');
  slot_name  |    lsn    
-------------+-----------
 test_slot_1 | 0/492B078
(1 row)

创建一些 WAL 活动,这里通过将一行插入到现有表中

postgres=# INSERT INTO foo VALUES (1, 'foo');
INSERT 0 1

然后可以使用 pg_logical_slot_peek_binary_changes() 通过先前创建的逻辑复制槽重复查询此 WAL 活动

postgres=# SELECT * FROM pg_logical_slot_peek_binary_changes('test_slot_1', NULL, NULL, 'include-xids', '0');
    lsn    | xid |                                                       data                                                       
-----------+-----+------------------------------------------------------------------------------------------------------------------
 0/492B078 | 718 | \x424547494e
 0/492B078 | 718 | \x7461626c65207075626c69632e666f6f3a20494e534552543a2069645b696e74656765725d3a312076616c5b746578745d3a27666f6f27
 0/492C6A8 | 718 | \x434f4d4d4954
(3 rows)

postgres=# SELECT * FROM pg_logical_slot_peek_binary_changes('test_slot_1', NULL, NULL, 'include-xids', '0');
    lsn    | xid |                                                       data                                                       
-----------+-----+------------------------------------------------------------------------------------------------------------------
 0/492B078 | 718 | \x424547494e
 0/492B078 | 718 | \x7461626c65207075626c69632e666f6f3a20494e534552543a2069645b696e74656765725d3a312076616c5b746578745d3a27666f6f27
 0/492C6A8 | 718 | \x434f4d4d4954
(3 rows)

如果随后使用例如 pg_logical_slot_get_binary_changes() 使用可用 WAL,或者复制槽被推进(并且没有其他 WAL 活动发生),则先前返回的数据将不再可用

postgres=# SELECT * FROM pg_replication_slot_advance('test_slot_1', '0/492C6A8');
  slot_name  |  end_lsn  
-------------+-----------
 test_slot_1 | 0/492C6A8
(1 row)

postgres=# SELECT * FROM pg_logical_slot_peek_binary_changes('test_slot_1', NULL, NULL, 'include-xids', '0');
 lsn | xid | data 
-----+-----+------
(0 rows)

分类

逻辑复制复制复制槽系统函数

另请参阅

pg_logical_slot_get_changes()pg_logical_slot_peek_changes()pg_logical_slot_get_binary_changes()

反馈

提交任何关于 "pg_logical_slot_peek_binary_changes()" 的评论、建议或更正 在此处