# 第 31 章逻辑复制

目录

31.1.出版物

31.2.订阅

31.2.1.复制槽管理

31.3.冲突

31.4.限制

31.5.建筑学

31.5.1.初始快照

31.6.监控

31.7.安全

31.8.配置设置

31.9.快速设置

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

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

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

逻辑复制的典型用例是:

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

  • 当单个更改到达订阅者时触发它们。

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

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

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

  • 将复制数据的访问权限授予不同的用户组。

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

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