2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:开发版
不支持的版本:11 / 10

29.8. 架构 #

逻辑复制首先复制发布者数据库上的数据快照。完成后,发布者上的更改将实时发送到订阅者。订阅者按照发布者提交更改的顺序应用数据,从而保证任何单个订阅中发布内容的事务一致性。

逻辑复制的架构类似于物理流复制(参见第26.2.5节)。它由walsenderapply进程实现。walsender进程启动WAL的逻辑解码(在第47章中描述)并加载标准逻辑解码输出插件(pgoutput)。该插件将从WAL读取的更改转换为逻辑复制协议(参见第53.5节),并根据发布规范过滤数据。然后,使用流复制协议将数据持续传输到apply工作进程,该进程将数据映射到本地表并在收到各个更改时按正确的交易顺序应用它们。

订阅者数据库上的apply进程始终以session_replication_role设置为replica运行。这意味着,默认情况下,触发器和规则不会在订阅者上触发。用户可以选择使用ALTER TABLE命令以及ENABLE TRIGGERENABLE RULE子句在表上启用触发器和规则。

逻辑复制apply进程目前仅触发行触发器,而不触发语句触发器。但是,初始表同步的实现方式类似于COPY命令,因此会为INSERT触发行触发器和语句触发器。

29.8.1. 初始快照 #

现有已订阅表的初始数据将在特殊类型的apply进程的并行实例中进行快照并复制。此进程将创建自己的复制槽并复制现有数据。复制完成后,表内容将对其他后端可见。复制现有数据后,工作进程进入同步模式,该模式通过使用标准逻辑复制流式传输在初始数据复制期间发生的任何更改,确保表与主apply进程同步。在此同步阶段,更改将按照在发布者上发生的相同顺序应用和提交。同步完成后,表的复制控制将返回给主apply进程,复制将照常继续。

注意

发布publish参数仅影响将复制哪些DML操作。初始数据同步在复制现有表数据时不会考虑此参数。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用此表单报告文档问题。