Skip to content

第 31 章. 逻辑复制

目录

31.1. 发布
31.2. 订阅
31.2.1. 复制槽管理
31.2.2. 示例:设置逻辑复制
31.2.3. 示例:延迟复制槽创建
31.3. 行过滤器
31.3.1. 行过滤器规则
31.3.2. 表达式限制
31.3.3. UPDATE 转换
31.3.4. 分区表
31.3.5. 初始数据同步
31.3.6. 组合多个行过滤器
31.3.7. 示例
31.4. 列列表
31.4.1. 示例
31.5. 冲突
31.6. 限制
31.7. 架构
31.7.1. 初始快照
31.8. 监控
31.9. 安全
31.10. 配置设置
31.10.1. 发布者
31.10.2. 订阅者
31.11. 快速设置

逻辑复制是一种基于数据对象及其更改(通常是主键)的复制数据对象和更改的方法。我们使用术语逻辑,以区别于物理复制,后者使用精确的块地址和逐字节复制。PostgreSQL 同时支持这两种机制,请参见第 27 章。逻辑复制允许对数据复制和安全进行细粒度控制。

逻辑复制使用发布订阅模型,其中一个或多个订阅者订阅发布者节点上的一个或多个发布。订阅者从他们订阅的发布中提取数据,随后可能会重新发布数据以允许级联复制或更复杂的配置。

表的逻辑复制通常从对发布者数据库上的数据进行快照并将其复制到订阅者开始。完成后,发布者上的更改将实时发送到订阅者。订阅者按与发布者相同的顺序应用数据,以便保证单个订阅中的发布的事务一致性。这种数据复制方法有时称为事务复制。

逻辑复制的典型用例是

  • 在单个数据库或数据库子集中发送增量更改,以便在发生时将其发送给订阅者。

  • 在订阅者收到各个更改时触发触发器。

  • 将多个数据库合并为一个数据库(例如用于分析目的)。

  • 在 PostgreSQL 的不同主要版本之间复制。

  • 在不同平台上的 PostgreSQL 实例之间复制(例如从 Linux 到 Windows)

  • 向不同用户组提供对已复制数据的访问权限。

  • 在多个数据库之间共享数据库的子集。

订阅者数据库的行为与任何其他 PostgreSQL 实例相同,并且可以通过定义其自己的发布来用作其他数据库的发布者。当应用程序将订阅者视为只读时,单个订阅不会产生冲突。另一方面,如果其他写入操作是由应用程序或其他订阅者对同一组表执行的,则可能会出现冲突。