↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
历史版本PostgreSQL 13 已于 2025 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

30.5. 架构 #

逻辑复制首先复制发布端数据库中数据的快照。完成后,发布端的变更会随着发生实时发送给订阅端。订阅端按照发布端提交的顺序应用数据,因此对于单个订阅中的发布,可以保证事务一致性。

逻辑复制采用类似于物理流复制的架构(见第 26.2.5 节)。它由“walsender”和“apply”进程实现。walsender 进程启动 WAL 的逻辑解码(见第 48 章),并加载标准逻辑解码输出插件(pgoutput)。该插件将从 WAL 读取的变更转换为逻辑复制协议(见第 52.5 节),并根据发布规范过滤数据。然后使用流复制协议将数据持续传输给应用工作进程,该工作进程将数据映射到本地表,并按正确的事务顺序逐一应用每个变更。

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

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

30.5.1. 初始快照 #

已订阅表中的初始数据由一种特殊的应用进程的并行实例建立快照并复制。该进程将创建自己的临时复制槽并复制现有数据。现有数据复制完成后,工作进程进入同步模式,通过使用标准逻辑复制流式传输初始数据复制期间发生的所有变更,确保该表与主应用进程同步。同步完成后,该表的复制控制权交还给主应用进程,此后复制照常继续。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。