目录
逻辑复制是一种基于其复制标识(通常是主键)来复制数据对象及其更改的方法。我们使用“逻辑”一词来区别于物理复制,后者使用精确的块地址和逐字节复制。PostgreSQL 同时支持这两种机制,请参阅 第 26 章。逻辑复制允许对数据复制和安全进行精细控制。
逻辑复制使用一个发布(publish)和订阅(subscribe)模型,其中一个或多个订阅者(subscribers)在发布者(publisher)节点上订阅一个或多个发布(publications)。订阅者从它们订阅的发布中拉取数据,并可以随后重新发布数据以实现级联复制或更复杂的配置。
当逻辑复制表通常开始时,PostgreSQL 会在发布者数据库中获取表的初始数据快照,并将其复制到订阅者。完成后,发布者自初始复制以来的更改将持续发送给订阅者。订阅者按照与发布者相同的顺序应用数据,因此在一个订阅内的发布可以保证事务一致性。这种数据复制方法有时被称为事务复制。
逻辑复制的典型用例是
在单个数据库或数据库子集发生更改时,将增量更改发送给订阅者。
当更改到达订阅者时,为单个更改触发触发器。
将多个数据库合并到一个数据库中(例如用于分析目的)。
在不同主版本的 PostgreSQL 之间进行复制。
在不同平台上的 PostgreSQL 实例之间进行复制(例如 Linux 到 Windows)。
允许不同用户组访问复制的数据。
在多个数据库之间共享数据库的子集。
订阅者数据库的行为与其他任何 PostgreSQL 实例一样,并且可以通过定义自己的发布来作为其他数据库的发布者。当应用程序将订阅者视为只读时,单个订阅不会产生冲突。另一方面,如果应用程序或其他订阅者对同一组表进行了其他写入操作,则可能产生冲突。
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。