逻辑复制从拷贝发布者数据库上的数据库快照开始。拷贝一旦完成,发布者上的更改会在它们发生时实时传送给订阅者。订阅者按照数据在发布者上被提交的顺序应用数据,这样任意单一订阅中的发布的事务一致性才能得到保证。
逻辑复制的架构与物理流复制(参见第 27.2.5 节)类似。
它由walsender
和apply
进程实现。
walsender进程启动WAL的逻辑解码(详见第 49 章)
并加载标准的逻辑解码输出插件(pgoutput
)。
插件将从WAL读取的更改转换为逻辑复制协议
(参见第 55.5 节),并根据发布规范过滤数据。
然后,数据通过流复制协议持续传输到apply工作进程,
该进程将数据映射到本地表,并按照正确的事务顺序应用接收到的各个更改。
在订阅者数据库上应用过程始终以
session_replication_role
设置为replica
运行。
这意味着,默认情况下,触发器和规则不会在订阅者上触发。用户可以选择使用ALTER TABLE
命令和ENABLE TRIGGER
和ENABLE RULE
子句在表上启用触发器和规则。
逻辑复制应用进程当前仅会引发行触发器,而不会引发语句触发器。不过,初始的表同步是以类似一个COPY
命令的方式实现的,因此会引发INSERT
的行触发器和语句触发器。