test_decoding

一个提供逻辑解码输出插件示例的 contrib 模块

test_decoding 是一个提供逻辑解码输出插件代码示例的contrib 模块

test_decoding 添加于PostgreSQL 9.4

用法

test_decoding 通过逻辑复制槽接收WAL 更改,并将其作为人类可读的文本发出。它没有任何实际应用,但可作为开发输出插件的示例。

选项

尽管没有记录,但截至PostgreSQL 14test_decoding 接受以下选项,这些选项可以通过pg_logical_slot_get_changes() 等提供

  • force-binary
  • include-rewrites (PostgreSQL 11 及更高版本)
  • include-timestamp
  • include-xids
  • only-local (PostgreSQL 9.6 及更高版本)
  • skip-empty-xacts
  • stream-changes (PostgreSQL 14 及更高版本)

所有选项都是布尔值。

更改历史记录

示例

使用指定为插件的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)

有关更详细的示例,请参阅 PostgreSQL 文档部分逻辑解码示例

分类

Contrib 模块逻辑复制

另请参阅

pg_logical_slot_get_changes()pg_logical_slot_peek_changes()pg_logical_slot_get_binary_changes()pg_logical_slot_peek_binary_changes()

反馈

提交任何关于 "test_decoding" 的评论、建议或更正 在此