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_cb | pg_decode_begin_txn |
| 行变更 | 已注册处理函数;适用条件限制 | change_cb | pg_decode_change |
| Commit | 已注册处理函数;适用条件限制 | commit_cb | pg_decode_commit_txn |
| TRUNCATE | 已注册处理函数;适用条件限制 | truncate_cb | pg_decode_truncate |
| 逻辑消息 | 已注册处理函数;适用条件限制 | message_cb | pg_decode_message |
| 开始流式事务 | 已注册处理函数;适用条件限制 | stream_start_cb | pg_decode_stream_start |
| 流式行变更 | 已注册处理函数;适用条件限制 | stream_change_cb | pg_decode_stream_change |
| 准备事务 | 已注册处理函数;适用条件限制 | prepare_cb | pg_decode_prepare_txn |
| 提交已准备事务 | 已注册处理函数;适用条件限制 | commit_prepared_cb | pg_decode_commit_prepared_txn |
| 回滚已准备事务 | 已注册处理函数;适用条件限制 | rollback_prepared_cb | pg_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 的测试/示例模块
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 10 → 11: 属性变化。
以下差异保留原始字段名与英文源描述。
--- PostgreSQL 10
+++ PostgreSQL 11
@@ -6,12 +6,14 @@
"filter_by_origin_cb": "pg_decode_filter",
"message_cb": "pg_decode_message",
"shutdown_cb": "pg_decode_shutdown",
- "startup_cb": "pg_decode_startup"
+ "startup_cb": "pg_decode_startup",
+ "truncate_cb": "pg_decode_truncate"
},
"options": [],
"protocol_versions": {},
"source_options": [
"force-binary",
+ "include-rewrites",
"include-timestamp",
"include-xids",
"only-local",
比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。
导出 JSON · 返回逻辑解码插件 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。