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 17 → 18: 属性变化。
以下差异保留原始字段名与英文源描述。
--- PostgreSQL 17
+++ PostgreSQL 18
@@ -27,7 +27,7 @@
"name": "proto_version"
},
{
- "definition": "Comma separated list of publication names for which to subscribe (receive changes). The individual publication names are treated as standard objects names and can be quoted the same as needed. At least one publication name is required.",
+ "definition": "Comma-separated list of publication names for which to subscribe (receive changes). The individual publication names are treated as standard objects names and can be quoted the same as needed. At least one publication name is required.",
"name": "publication_names"
},
{
@@ -47,7 +47,7 @@
"name": "two_phase"
},
{
- "definition": "Option to send changes by their origin. Possible values are \"none\" to only send the changes that have no origin associated, or \"any\" to send the changes regardless of their origin. This can be used to avoid loops (infinite replication of the same data) among replication nodes.",
+ "definition": "Option to send changes by their origin. Possible values are none to only send the changes that have no origin associated, or any to send the changes regardless of their origin. This can be used to avoid loops (infinite replication of the same data) among replication nodes.",
"name": "origin"
}
],
比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。
导出 JSON · 返回逻辑解码插件 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。