pg_logical_slot_get_changes()

返回逻辑复制槽中更改的函数

pg_logical_slot_get_changes() 是一个系统函数,用于返回指定逻辑复制槽中的一组指定更改。

pg_logical_slot_get_changes()PostgreSQL 9.4 中添加。

用法

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

返回的更改集将从之前已使用更改的点开始。

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

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

要检索更改而不使用它们,请使用 pg_logical_slot_peek_changes()

变更历史

示例

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

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

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

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

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

postgres=# SELECT * FROM pg_logical_slot_get_changes('test_slot_1', NULL, NULL, 'include-xids', '0');
    lsn    | xid |                                       data
-----------+-----+-----------------------------------------------------------------------------------
 0/3023580 | 726 | BEGIN
 0/3023580 | 726 | table public.foo: INSERT: id[integer]:1 val[text]:'2021-08-09 10:00:38.622597+01'
 0/3023610 | 726 | COMMIT
(3 rows)

由于输出插件现在已使用更改,因此后续对 pg_logical_slot_get_changes() 的调用(假设没有写入其他WAL)将返回一个空结果集

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

尝试从物理复制槽检索更改

postgres=# SELECT * FROM pg_logical_slot_get_changes('physical_slot_1', NULL, NULL, 'include-xids', '0');
ERROR:  cannot use physical replication slot for logical decoding

分类

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

参见

pg_logical_slot_peek_changes()pg_logical_slot_get_binary_changes()pg_logical_slot_peek_binary_changes()

反馈

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