test_decoding
是一个提供逻辑解码输出插件代码示例的contrib 模块。
test_decoding
添加于PostgreSQL 9.4。
用法
test_decoding
通过逻辑复制槽接收WAL 更改,并将其作为人类可读的文本发出。它没有任何实际应用,但可作为开发输出插件的示例。
选项
尽管没有记录,但截至PostgreSQL 14,test_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 及更高版本)
所有选项都是布尔值。
更改历史记录
- 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
然后可以使用先前创建的逻辑复制槽通过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 文档部分逻辑解码示例。
参考文献
- PostgreSQL 文档: test_decoding
- PostgreSQL 文档: 逻辑解码示例