目录
逻辑复制是一种基于数据对象的复制标识(通常是主键)复制数据对象及其更改的方法。我们 使用术语“逻辑”来与物理复制加以区分,后者使用准确的块地址以及逐字节的复制方式。 PostgreSQL两种机制都支持,请见第 26 章。逻辑复制允许在数据复制 和安全性上更细粒度的控制。
逻辑复制使用一种发布和订阅模型,其中有一个或 更多订阅者订阅一个发布者节点上的一个或更多 发布。订阅者从它们所订阅的发布拉取数据,并且可能后续重新发布这些 数据以允许级联复制或更复杂的配置。
当表的逻辑复制通常开始时,PostgreSQL会在发布者数据库上拍摄表数据的快照并将其复制到 订阅者。一旦完成,自初始复制以来发布者的更改会不断发送到订阅者。订阅者以与发布者 相同的顺序应用数据,以确保在单个订阅中的发布的事务一致性。这种数据复制方法有时被 称为事务复制。
逻辑复制的典型用法是:
在一个数据库或一个数据库的子集中发生更改时,把增量的改变发送给订阅者。
在更改到达订阅者时引发触发器。
把多个数据库联合到单一数据库中(例如用于分析目的)。
在PostgreSQL的不同主版本之间进行复制。
在不同平台上(例如Linux到Windows)的PostgreSQL实例之间进行复制。
将复制数据的访问给予不同的用户组。
在多个数据库间共享数据库的一个子集。
订阅者数据库的行为与任何其他PostgreSQL实例相同,并且可以被用作其他数据库的发布者, 只需要定义它自己的发布。当订阅者被应用当作只读时,单一的订阅中不会有冲突。另一方面, 如果应用或者对相同表集合的订阅者执行了其他的写动作,冲突可能会发生。