test_decoding 是一个 contrib 模块,它提供了逻辑解码的示例输出插件代码。
test_decoding 在 PostgreSQL 9.4 中添加。
用法
test_decoding 通过逻辑复制槽接收 WAL 更改,并将它们以人类可读的文本格式输出。它没有任何实际应用,但可作为开发输出插件的示例。
选项
尽管未被文档记录,但截至 PostgreSQL 14,test_decoding 接受以下选项,这些选项可以通过 pg_logical_slot_get_changes() 等函数提供:
force-binaryinclude-rewrites(PostgreSQL 11 及更高版本)include-timestampinclude-xidsonly-local(PostgreSQL 9.6 及更高版本)skip-empty-xactsstream-changes(PostgreSQL 14 及更高版本)
所有选项均为布尔值。
变更历史
- PostgreSQL 17
- PostgreSQL 15
- 添加了选项
include-sequences(提交 80901b32)
- 添加了选项
- PostgreSQL 14
- 添加了选项
stream-changes(提交 7259736a)
- 添加了选项
- PostgreSQL 11
- 添加了选项
include-rewrites(提交 325f2ec5)
- 添加了选项
- PostgreSQL 9.5
- 添加了选项
only-local(提交 5aa23504)
- 添加了选项
- PostgreSQL 9.4
- 添加 (提交 b89e1510)
示例
创建一个以 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
这些 WAL 活动随后可以通过先前创建的逻辑复制槽,使用 pg_logical_slot_get_changes() 进行查询。
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 文档中的 逻辑解码示例 部分。
参考资料
- PostgreSQL 文档: test_decoding
- PostgreSQL 文档: 逻辑解码示例
分类
另请参阅
反馈
在此处 提交关于“test_decoding”的任何评论、建议或更正。