↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 逻辑解码插件 / 测试与示例

test_decoding

Testing and examples

用于测试和示例的输出插件,以文本格式呈现逻辑变更。

当前查看 PostgreSQL 18.6。

说明

用于测试和示例的输出插件,以文本格式呈现逻辑变更。

接口类别
逻辑解码输出插件
处理函数或例程
_PG_output_plugin_init
记录的回调
21

接口与能力边界

矩阵记录此源码构建实际注册的回调。注册表明实现了相应接口钩子;操作是否允许还取决于选项、查询形式、权限和提供方规则。

下方保留同版本完整手册,包括配置、约束和示例。不声称已进行运行时能力测试。

输出与协议边界

回调是否存在、协议版本、客户端协商及已启用的插件选项分别记录。流式处理和两阶段处理需要匹配的协议与配置。

test_decoding 是示例/测试输出格式,pgoutput 实现逻辑复制协议,两者的输出约定不可互换。

核心源码中注册的实现

{
	cb->startup_cb = pg_decode_startup;
	cb->begin_cb = pg_decode_begin_txn;
	cb->change_cb = pg_decode_change;
	cb->truncate_cb = pg_decode_truncate;
	cb->commit_cb = pg_decode_commit_txn;
	cb->filter_by_origin_cb = pg_decode_filter;
	cb->shutdown_cb = pg_decode_shutdown;
	cb->message_cb = pg_decode_message;
	cb->filter_prepare_cb = pg_decode_filter_prepare;
	cb->begin_prepare_cb = pg_decode_begin_prepare_txn;
	cb->prepare_cb = pg_decode_prepare_txn;
	cb->commit_prepared_cb = pg_decode_commit_prepared_txn;
	cb->rollback_prepared_cb = pg_decode_rollback_prepared_txn;
	cb->stream_start_cb = pg_decode_stream_start;
	cb->stream_stop_cb = pg_decode_stream_stop;
	cb->stream_abort_cb = pg_decode_stream_abort;
	cb->stream_prepare_cb = pg_decode_stream_prepare;
	cb->stream_commit_cb = pg_decode_stream_commit;
	cb->stream_change_cb = pg_decode_stream_change;
	cb->stream_message_cb = pg_decode_stream_message;
	cb->stream_truncate_cb = pg_decode_stream_truncate;
}

注册的接口处理函数

接口操作源码观察回调实现
开始事务已注册处理函数;适用条件限制begin_cbpg_decode_begin_txn
行变更已注册处理函数;适用条件限制change_cbpg_decode_change
Commit已注册处理函数;适用条件限制commit_cbpg_decode_commit_txn
TRUNCATE已注册处理函数;适用条件限制truncate_cbpg_decode_truncate
逻辑消息已注册处理函数;适用条件限制message_cbpg_decode_message
开始流式事务已注册处理函数;适用条件限制stream_start_cbpg_decode_stream_start
流式行变更已注册处理函数;适用条件限制stream_change_cbpg_decode_stream_change
准备事务已注册处理函数;适用条件限制prepare_cbpg_decode_prepare_txn
提交已准备事务已注册处理函数;适用条件限制commit_prepared_cbpg_decode_commit_prepared_txn
回滚已准备事务已注册处理函数;适用条件限制rollback_prepared_cbpg_decode_rollback_prepared_txn

本构建识别的插件选项名

从选项解析器中提取;仅凭名称无法确定默认值、可接受的取值或协议要求。

源码选项名
force-binary
include-rewrites
include-timestamp
include-xids
only-local
skip-empty-xacts
stream-changes

手册定义

F.45. test_decoding — 用于 WAL 逻辑解码的基于 SQL 的测试/示例模块

test_decoding 是一个逻辑解码输出插件示例。它本身并没有什么特别有用的功能,但可作为开发自定义输出插件的起点。

test_decoding 通过逻辑解码机制接收 WAL,并将其解码为所执行操作的文本表示形式。

通过 SQL 逻辑解码接口使用该插件时,其典型输出可能如下:

postgres=# SELECT * FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'include-xids', '0');
   lsn     | xid |                       data
-----------+-----+--------------------------------------------------
 0/16D30F8 | 691 | BEGIN
 0/16D32A0 | 691 | table public.data: INSERT: id[int4]:2 data[text]:'arg'
 0/16D32A0 | 691 | table public.data: INSERT: id[int4]:3 data[text]:'demo'
 0/16D32A0 | 691 | COMMIT
 0/16D32D8 | 692 | BEGIN
 0/16D3398 | 692 | table public.data: DELETE: id[int4]:2
 0/16D3398 | 692 | table public.data: DELETE: id[int4]:3
 0/16D3398 | 692 | COMMIT
(8 rows)

我们还可以获取进行中事务的变更,其典型输出可能如下:

postgres[33712]=#* SELECT * FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'stream-changes', '1');
    lsn    | xid |                       data
-----------+-----+--------------------------------------------------
 0/16B21F8 | 503 | opening a streamed block for transaction TXN 503
 0/16B21F8 | 503 | streaming change for TXN 503
 0/16B2300 | 503 | streaming change for TXN 503
 0/16B2408 | 503 | streaming change for TXN 503
 0/16BEBA0 | 503 | closing a streamed block for transaction TXN 503
 0/16B21F8 | 503 | opening a streamed block for transaction TXN 503
 0/16BECA8 | 503 | streaming change for TXN 503
 0/16BEDB0 | 503 | streaming change for TXN 503
 0/16BEEB8 | 503 | streaming change for TXN 503
 0/16BEBA0 | 503 | closing a streamed block for transaction TXN 503
(10 rows)

相关条目

文档与源码

来源构建
版本
18.6
构建
PostgreSQL 18.6 source archive
来源指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

版本比较

PostgreSQL 17 → 18: 无变化。

比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。

导出 JSON · 返回逻辑解码插件 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。