31.5. Architecture

逻辑复制从复制发布者数据库上的数据快照开始。完成此操作后,发布者上的更改将实时发送给订阅者。订阅者按照在发布者上进行提交的 Sequences 来应用数据,以便保证任何单个订阅中的出版物的事务一致性。

逻辑复制是使用类似于物理流复制的架构构建的(请参阅Section 26.2.5)。它通过“ walsender”和“ apply”过程实现。 walsender 进程开始 WAL 的逻辑解码(在Chapter 48中描述),并加载标准逻辑解码插件(pgoutput)。该插件将从 WAL 读取的更改转换为逻辑复制协议(请参见Section 52.5),并根据发布规范过滤数据。然后,使用流复制协议将数据连续传输到应用工作程序,该工作程序将数据 Map 到本地表,并在收到更改后按正确的事务 Sequences 应用各个更改。

在订户数据库上的应用过程始终在session_replication_role设置为replica的情况下运行,这会对触发器和约束产生通常的影响。

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

31 .5.1. 初始快照

现有预订表中的初始数据被快照并在一种特殊类型的应用过程的并行实例中复制。此过程将创建其自己的临时复制插槽并复制现有数据。复制现有数据后,工作程序将进入同步模式,该模式通过使用标准逻辑复制流式传输在初始数据复制过程中发生的所有更改,从而确保表与主要应用过程进入同步状态。同步完成后,将对表复制的控制权交还给主应用过程,在该过程中复制将照常 continue 进行。