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

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