31.1. Publication

可以在任何物理复制主机上定义* publication 。定义发布的节点称为 publisher *。发布是从一个表或一组表中生成的一组更改,也可以称为更改集或复制集。每个出版物仅存在于一个数据库中。

发布与架构不同,并且不影响表的访问方式。如果需要,可以将每个表添加到多个出版物中。出版物当前可能仅包含表。必须明确添加对象,除非为ALL TABLES创建发布。

出版物可以选择将它们产生的更改限制为INSERTUPDATEDELETE的任意组合,类似于特定事件类型触发触发器的方式。默认情况下,将复制所有操作类型。

已发布的表必须具有配置的“副本身份”,以便能够复制UPDATEDELETE操作,以便可以在订户侧标识要更新或删除的适当行。默认情况下,这是主键(如果有)。另一个唯一索引(具有某些其他要求)也可以设置为副本身份。如果该表没有任何合适的键,则可以将其设置为副本标识“ full”,这意味着整行成为键。但是,这是非常低效的,只有在没有其他解决方案可行的情况下,才应将其用作备用。如果在发布者侧设置了除“完整”以外的副本身份,则还必须在订户侧设置包含相同或更少列的副本身份。有关如何设置副本身份的详细信息,请参见REPLICA IDENTITY。如果将没有副本身份的表添加到复制UPDATEDELETE操作的发布中,则随后的UPDATEDELETE操作将在发布者上引起错误。 INSERT操作可以 continue 进行,而不考虑任何副本身份。

每个出版物可以有多个订阅者。

使用CREATE PUBLICATION命令创建发布,以后可以使用相应的命令更改或删除发布。

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