pgoutput
Core replication
本节介绍逻辑复制协议,它是一种以复制命令 START_REPLICATION SLOT slot_name LOGICAL 开始的消息流。 逻辑流复制协议构建在物理流复制协议的基本机制之上。 PostgreSQL 的逻辑解码支持输出插件。 pgoutput 是内置逻辑复制使用的标准插件。
当前查看 PostgreSQL 18。
中文定义与说明
逻辑解码插件 pgoutput。
同版本中文手册节选
本节介绍逻辑复制协议,它是一种以复制命令 START_REPLICATION
SLOT slot_name
LOGICAL 开始的消息流。
逻辑流复制协议构建在物理流复制协议的基本机制之上。
PostgreSQL 的逻辑解码支持输出插件。pgoutput 是内置逻辑复制使用的标准插件。
说明
本节介绍逻辑复制协议,它是一种以复制命令 START_REPLICATION SLOT slot_name LOGICAL 开始的消息流。 逻辑流复制协议构建在物理流复制协议的基本机制之上。 PostgreSQL 的逻辑解码支持输出插件。 pgoutput 是内置逻辑复制使用的标准插件。
- 接口类别
- 逻辑解码输出插件
- 处理函数或例程
- _PG_output_plugin_init
- 记录的回调
- 20
- LOGICALREP_PROTO_MIN_VERSION_NUM
- 1
- LOGICALREP_PROTO_VERSION_NUM
- 1
- LOGICALREP_PROTO_STREAM_VERSION_NUM
- 2
- LOGICALREP_PROTO_TWOPHASE_VERSION_NUM
- 3
- LOGICALREP_PROTO_STREAM_PARALLEL_VERSION_NUM
- 4
接口与能力边界
矩阵记录此源码构建实际注册的回调。注册表明实现了相应接口钩子;操作是否允许还取决于选项、查询形式、权限和提供方规则。
下方保留同版本完整手册,包括配置、约束和示例。不声称已进行运行时能力测试。
输出与协议边界
回调是否存在、协议版本、客户端协商及已启用的插件选项分别记录。流式处理和两阶段处理需要匹配的协议与配置。
test_decoding 是示例/测试输出格式,pgoutput 实现逻辑复制协议,两者的输出约定不可互换。
核心源码中注册的实现
{
cb->startup_cb = pgoutput_startup;
cb->begin_cb = pgoutput_begin_txn;
cb->change_cb = pgoutput_change;
cb->truncate_cb = pgoutput_truncate;
cb->message_cb = pgoutput_message;
cb->commit_cb = pgoutput_commit_txn;
cb->begin_prepare_cb = pgoutput_begin_prepare_txn;
cb->prepare_cb = pgoutput_prepare_txn;
cb->commit_prepared_cb = pgoutput_commit_prepared_txn;
cb->rollback_prepared_cb = pgoutput_rollback_prepared_txn;
cb->filter_by_origin_cb = pgoutput_origin_filter;
cb->shutdown_cb = pgoutput_shutdown;
/* transaction streaming */
cb->stream_start_cb = pgoutput_stream_start;
cb->stream_stop_cb = pgoutput_stream_stop;
cb->stream_abort_cb = pgoutput_stream_abort;
cb->stream_commit_cb = pgoutput_stream_commit;
cb->stream_change_cb = pgoutput_change;
cb->stream_message_cb = pgoutput_message;
cb->stream_truncate_cb = pgoutput_truncate;
/* transaction streaming - two-phase commit */
cb->stream_prepare_cb = pgoutput_stream_prepare_txn;
}注册的接口处理函数
| 接口操作 | 源码观察 | 回调 | 实现 |
|---|---|---|---|
| 开始事务 | 已注册处理函数;适用条件限制 | begin_cb | pgoutput_begin_txn |
| 行变更 | 已注册处理函数;适用条件限制 | change_cb | pgoutput_change |
| Commit | 已注册处理函数;适用条件限制 | commit_cb | pgoutput_commit_txn |
| TRUNCATE | 已注册处理函数;适用条件限制 | truncate_cb | pgoutput_truncate |
| 逻辑消息 | 已注册处理函数;适用条件限制 | message_cb | pgoutput_message |
| 开始流式事务 | 已注册处理函数;适用条件限制 | stream_start_cb | pgoutput_stream_start |
| 流式行变更 | 已注册处理函数;适用条件限制 | stream_change_cb | pgoutput_change |
| 准备事务 | 已注册处理函数;适用条件限制 | prepare_cb | pgoutput_prepare_txn |
| 提交已准备事务 | 已注册处理函数;适用条件限制 | commit_prepared_cb | pgoutput_commit_prepared_txn |
| 回滚已准备事务 | 已注册处理函数;适用条件限制 | rollback_prepared_cb | pgoutput_rollback_prepared_txn |
手册中的选项
| 选项 | 同版本定义 |
|---|---|
| proto_version | 协议版本。目前支持版本 1、2、3 和 4,必须指定有效版本。版本 2 仅在服务器版本 14 及以上支持,可流式传输进行中的大型事务。版本 3 仅在服务器版本 15 及以上支持,可流式传输两阶段提交。版本 4 仅在服务器版本 16 及以上支持,可并行应用进行中的大型事务流。 |
| publication_names | 要订阅(接收变更)的发布名称列表,以逗号分隔。各个发布名称按标准对象名处理,可按需加引号。至少需要一个发布名称。 |
| binary | 使用二进制传输模式的布尔选项。二进制模式比文本模式更快,但稳健性略差。 |
| messages | 布尔选项,用于启用发送由 pg_logical_emit_message 写入的消息。 |
| streaming | 启用进行中事务流式传输的选项。可选值为 off (默认)、 on 和 parallel 。 parallel 会在部分消息中附带用于并行化的额外信息。设置为 on 需要最低协议版本 2;设置为 parallel 需要最低协议版本 4。 |
| two_phase | 启用两阶段事务的布尔选项,要求协议版本至少为 3。 |
| origin | 按来源发送变更的选项。可选值为 none (仅发送无来源信息的变更)或 any (无论来源均发送)。该选项可用于避免复制节点之间形成循环(同一数据无限复制)。 |
本构建识别的插件选项名
从选项解析器中提取;仅凭名称无法确定默认值、可接受的取值或协议要求。
| 源码选项名 |
|---|
| binary |
| messages |
| origin |
| proto_version |
| publication_names |
| streaming |
| two_phase |
相关条目
文档与源码
- PostgreSQL 18 English manual
- src/backend/replication/pgoutput/pgoutput.c:262
- PostgreSQL 18 English manual
- Logical replication protocol constants
来源构建
- 版本
- 18.6
- 构建
- PostgreSQL 18.6 source archive
- 来源指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f
版本比较
PostgreSQL 14 → 15: 属性变化。
以下差异保留原始字段名与英文源描述。
--- PostgreSQL 14
+++ PostgreSQL 15
@@ -1,16 +1,21 @@
{
"callbacks": {
"begin_cb": "pgoutput_begin_txn",
+ "begin_prepare_cb": "pgoutput_begin_prepare_txn",
"change_cb": "pgoutput_change",
"commit_cb": "pgoutput_commit_txn",
+ "commit_prepared_cb": "pgoutput_commit_prepared_txn",
"filter_by_origin_cb": "pgoutput_origin_filter",
"message_cb": "pgoutput_message",
+ "prepare_cb": "pgoutput_prepare_txn",
+ "rollback_prepared_cb": "pgoutput_rollback_prepared_txn",
"shutdown_cb": "pgoutput_shutdown",
"startup_cb": "pgoutput_startup",
"stream_abort_cb": "pgoutput_stream_abort",
"stream_change_cb": "pgoutput_change",
"stream_commit_cb": "pgoutput_stream_commit",
"stream_message_cb": "pgoutput_message",
+ "stream_prepare_cb": "pgoutput_stream_prepare_txn",
"stream_start_cb": "pgoutput_stream_start",
"stream_stop_cb": "pgoutput_stream_stop",
"stream_truncate_cb": "pgoutput_truncate",
@@ -18,7 +23,7 @@
},
"options": [
{
- "definition": "Protocol version. Currently versions 1 and 2 are supported. A valid version is required. The version 2 is supported only for server version 14 and above, and it allows streaming of large in-progress transactions.",
+ "definition": "Protocol version. Currently versions 1 , 2 , and 3 are supported. A valid version is required. Version 2 is supported only for server version 14 and above, and it allows streaming of large in-progress transactions. Version 3 is supported only for server version 15 and above, and it allows streaming of two-phase commits.",
"name": "proto_version"
},
{
@@ -36,11 +41,16 @@
{
"definition": "Boolean option to enable streaming of in-progress transactions. Minimum protocol version 2 is required to turn it on.",
"name": "streaming"
+ },
+ {
+ "definition": "Boolean option to enable two-phase transactions. Minimum protocol version 3 is required to turn it on.",
+ "name": "two_phase"
}
],
"protocol_versions": {
"LOGICALREP_PROTO_MIN_VERSION_NUM": "1",
"LOGICALREP_PROTO_STREAM_VERSION_NUM": "2",
+ "LOGICALREP_PROTO_TWOPHASE_VERSION_NUM": "3",
"LOGICALREP_PROTO_VERSION_NUM": "1"
},
"source_options": [
@@ -48,6 +58,7 @@
"messages",
"proto_version",
"publication_names",
- "streaming"
+ "streaming",
+ "two_phase"
]
}
比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。
导出 JSON · 返回逻辑解码插件 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。