Postgresql 中文操作指南

31.1. Publication #

可以在任何物理复制主数据库上定义_publication_。定义发布的节点被称为_publisher_。发布是一组由表或一群表生成的更改,也可以描述为更改集或复制集。每个发布仅存在于一个数据库中。

发布不同于模式,并且不影响访问表的方式。如有需要,每个表可以添加到多个发布中。目前发布仅可以包含模式中的表和所有表。必须明确添加对象,除非为_ALL TABLES_ 创建发布。

发布可以选择将其产生的更改限制在 INSERTUPDATEDELETETRUNCATE 的任意组合,类似于由特定事件类型触发的触发器的方式。默认情况下,所有操作类型都是复制的。这些发布规范仅适用于 DML 操作;它们不会影响初始数据同步副本。(行过滤器对 TRUNCATE 没有影响。请参见 Section 31.3)。

已发布表必须配置了 replica identity ,才能复制 UPDATEDELETE 操作,以便可以在订阅者侧识别要更新或删除的适当行。默认情况下,如果存在主键,则这是主键。另一个唯一索引(具有某些其他要求)也可以设置为副本标识。如果表没有任何合适的键,则可以将其设置为副本标识 FULL ,这意味着整行成为键。当指定副本标识 FULL 时,可以在订阅者侧使用索引搜索行。候选索引必须是 btree、不含部分,并且最左端的索引字段必须是引用已发布表列的列(而不是表达式)。对非唯一索引属性的这些限制遵循对主键强制实施的部分限制。如果没有此类合适的索引,则在订阅者侧进行搜索效率极低,因此,仅当没有其他解决方案可用时,才应将副本标识 FULL 用作后备。如果在发布者侧设置了 FULL 以外的副本标识,则在订户侧还必须设置包含相同列或更少列的副本标识。有关如何设置副本标识的详细信息,请参阅 REPLICA IDENTITY 。如果将没有副本标识的表添加到复制 UPDATEDELETE 操作的发布中,则随后的 UPDATEDELETE 操作将在发布者上导致错误。无论是否存在副本标识, INSERT 操作都可以继续进行。

每个发布可以有多个订阅者。

使用 CREATE PUBLICATION 命令创建发布,以后可以使用相应命令对其进行更改或废弃。

可以使用 ALTER PUBLICATION 动态添加和删除各个表。 ADD TABLEDROP TABLE 操作都是事务性的;因此,一旦事务提交,表将在正确快照处开始或停止复制。