9.3 9.4 9.5 9.6 10 11 12 13 14 15 Current(16) 17
问题报告 纠错本页面

31.1. 发布 #

publication可以被定义在任何物理复制的主服务器上。定义有发布的节点被称为发布者。发布是从一个表或者一组表生成的改变的集合,也可以被描述为更改集合或者复制集合。每个发布都只存在于一个数据库中。

publication与模式不同,不影响表的访问。每个表可以添加到多个publication中(如果需要)。 publication目前只能包含模式中的所有表。对象必须显式添加,除非为ALL TABLES创建了一个publication。

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

已发布的表必须配置一个副本标识,以便能够复制 UPDATEDELETE操作,从而在订阅 方能够识别出需要更新或删除的适当行。默认情况下,如果存在主键, 则使用主键。另一个唯一索引(具有某些额外要求)也可以设置为副本 标识。如果表没有任何合适的键,则可以将其设置为副本标识 FULL,这意味着整个行成为键。当指定副本标识 FULL时,可以在订阅方使用索引来搜索行。候选索引 必须是btree、非部分的,并且最左侧的索引字段必须是引用已发布表列 的列(而不是表达式)。这些对非唯一索引属性的限制遵循了一些对主键 强制执行的限制。如果没有这样的合适索引,则在订阅方的搜索可能会非常 低效,因此副本标识FULL应仅作为没有其他解决方案 时的后备选项。如果在发布方设置了FULL以外的副本 标识,则在订阅方也必须设置一个由相同或更少列组成的副本标识。有关如 何设置副本标识的详细信息,请参见 REPLICA IDENTITY。如果将没有副本标识的 表添加到复制UPDATEDELETE 操作的发布中,那么后续的UPDATEDELETE操作将在发布方引发错误。 INSERT操作可以在没有任何副本标识的情况下继续进行。

每一个发布都可以由多个订阅者。

Publication通过使用CREATE PUBLICATION命令创建并且可以在之后使用相应的命令进行修改或者删除。

表可以使用ALTER PUBLICATION动态地增加或者移除。ADD TABLE以及DROP TABLE操作都是事务性的,因此一旦该事务提交,该表将以正确的快照开始或者停止复制。