逻辑复制通过复制发布程序数据库中数据的快照开始。完成后,发布程序上的更改会实时发送到订阅程序。订阅程序按发布程序上提交的顺序应用数据,以保证任何单个订阅中的发布的一致性事务。
逻辑复制基于与物理流复制(请参阅 第 26.2.5 节)类似的架构构建。它通过 walsender
和 apply
进程实现。walsender 进程启动 WAL 的逻辑解码(在 第 47 章 中描述)并加载标准逻辑解码输出插件 (pgoutput
)。该插件将从 WAL 读入的更改转换为逻辑复制协议(请参阅 第 53.5 节),并根据发布规范筛选数据。然后使用流复制协议持续传输数据到应用工作进程,应用工作进程将数据映射到本地表并按接收顺序在正确的交易顺序中应用各个更改。
应用订阅数据库上的程序总是运行,session_replication_role
设为 replica
。这意味着,默认情况下,触发器和规则不会触发订户。用户可以选择使用 ALTER TABLE
命令和 ENABLE TRIGGER
和 ENABLE RULE
子句启用表上的触发器和规则。
逻辑复制应用程序目前只触发行触发器,不触发语句触发器。但是,初始表同步被实现为一个 COPY
命令,并且因此触发行和语句触发器 INSERT
。