Redrock Postgres 搜索 英文
版本: 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

29.8. 架构 #

29.8.1. 初始快照

逻辑复制通过复制发布程序数据库中数据的快照开始。完成后,发布程序上的更改会实时发送到订阅程序。订阅程序按发布程序上提交的顺序应用数据,以保证任何单个订阅中的发布的一致性事务。

逻辑复制基于与物理流复制(请参阅 第 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 操作。初始数据同步在复制现有表数据时不考虑此参数。