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

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

百科 / 逻辑解码插件 / 核心复制

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_cbpgoutput_begin_txn
行变更已注册处理函数;适用条件限制change_cbpgoutput_change
Commit已注册处理函数;适用条件限制commit_cbpgoutput_commit_txn
TRUNCATE已注册处理函数;适用条件限制truncate_cbpgoutput_truncate
逻辑消息已注册处理函数;适用条件限制message_cbpgoutput_message
开始流式事务已注册处理函数;适用条件限制stream_start_cbpgoutput_stream_start
流式行变更已注册处理函数;适用条件限制stream_change_cbpgoutput_change
准备事务已注册处理函数;适用条件限制prepare_cbpgoutput_prepare_txn
提交已准备事务已注册处理函数;适用条件限制commit_prepared_cbpgoutput_commit_prepared_txn
回滚已准备事务已注册处理函数;适用条件限制rollback_prepared_cbpgoutput_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

相关条目

文档与源码

来源构建
版本
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;最早采样版本不一定是实际引入版本。