支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: 开发版
不支持的版本: 12 / 11 / 10

29.8. 架构 #

逻辑复制首先复制发布者数据库上的数据快照。一旦完成,发布者上的更改会实时发送到订阅者。订阅者按照提交在发布者上的顺序应用数据,以确保任何单个订阅内的发布具有事务一致性。

逻辑复制的架构与物理流复制类似(请参阅 第 26.2.5 节)。它由 walsenderapply 进程实现。walsender 进程启动 WAL 的逻辑解码(在第 47 章中描述),并加载标准逻辑解码输出插件 (pgoutput)。该插件将从 WAL 读取的更改转换为逻辑复制协议(请参阅 第 53.5 节),并根据发布规范过滤数据。然后,使用流复制协议将数据连续传输到应用工作进程,该工作进程将数据映射到本地表,并按照正确的事务顺序应用接收到的各个更改。

订阅者数据库上的应用进程始终以 session_replication_role 设置为 replica 的方式运行。这意味着,默认情况下,触发器和规则不会在订阅者上触发。用户可以选择使用 ALTER TABLE 命令和 ENABLE TRIGGERENABLE RULE 子句来启用表上的触发器和规则。

逻辑复制应用进程当前仅触发行触发器,而不是语句触发器。但是,初始表同步的实现方式类似于 COPY 命令,因此会为 INSERT 触发行和语句触发器。

29.8.1. 初始快照 #

现有订阅表中的初始数据会被快照并复制到特殊类型的应用进程的并行实例中。此进程将创建自己的复制槽并复制现有数据。一旦复制完成,表内容将对其他后端可见。复制完现有数据后,工作进程进入同步模式,通过使用标准逻辑复制流式传输初始数据复制期间发生的任何更改,从而确保表与主应用进程同步。在此同步阶段,更改将按照它们在发布者上发生的顺序应用和提交。同步完成后,表的复制控制权将返回给主应用进程,并在该进程中继续正常复制。

注意

发布 publish 参数仅影响将复制哪些 DML 操作。复制现有表数据时,初始数据同步不考虑此参数。

提交更正

如果您在文档中看到任何不正确、与特定功能的使用体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。