逻辑复制首先复制发布者数据库上的数据快照。完成后,发布者上的变更会在发生时 实时发送给订阅者。订阅者会按照发布者上提交的顺序应用数据,因此对于单个订阅 中的任何发布,可以保证事务一致性。
逻辑复制采用了与物理流复制类似的架构(见 Section 26.2.5)。它由 walsender 和 apply 进程实现。walsender 进程会对 WAL 执行逻辑解码(见 Chapter 47),并装载标准逻辑解码输出插件 (pgoutput)。该插件会把从 WAL 中读取到的变更转换为逻辑复制协议 (见 Section 53.5),并按照发布规范过滤数据。 然后,数据会通过流复制协议持续传输给应用工作进程,由它把数据映射到本地表, 并在收到时按正确的事务顺序应用各项变更。
订阅端数据库上的应用进程始终在 session_replication_role 设置为 replica 的情况下运行。这意味着默认情况下,触发器和规则 不会在订阅端触发。用户可以选择使用 ALTER TABLE 命令以及 ENABLE TRIGGER 和 ENABLE RULE 子句, 在表上启用触发器和规则。
逻辑复制应用进程目前只会触发行触发器,不会触发语句触发器。不过,初始表同步的 实现方式类似于 COPY 命令,因此会为 INSERT 同时触发行触发器和语句触发器。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。