可以在任何物理复制主节点上定义一个 发布。定义发布的节点被称为 发布者。发布是一组从表或一组表生成的更改,也可以被描述为更改集或复制集。每个发布仅存在于一个数据库中。
发布不同于模式,并且不会影响对表的访问方式。如果需要,每个表都可以添加到多个发布中。发布目前只能包含表和模式中的所有表。必须显式添加对象,除非为 ALL TABLES
创建发布。
发布可以选择将它们产生的更改限制为 INSERT
、UPDATE
、DELETE
和 TRUNCATE
的任何组合,类似于触发器通过特定事件类型触发的机制。默认情况下,所有操作类型都会被复制。这些发布规范仅适用于 DML 操作;它们不会影响初始数据同步复制。(行过滤器对 TRUNCATE
无效。请参见 第 29.4 节)。
已发布的表必须配置 副本标识才能复制 UPDATE
和 DELETE
操作,以便在订阅者端识别出要更新或删除的适当行。默认情况下,这是主键(如果有)。另一个唯一索引(具有某些额外要求)也可以被设置为副本标识。如果表没有合适的键,那么它可以设置为副本标识 FULL
,这意味着整行将成为键。当指定副本标识 FULL
时,可以在订阅者端使用索引来搜索行。候选索引必须是 btree 或哈希,非部分索引,并且最左侧的索引字段必须是引用已发布表列的列(而不是表达式)。对非唯一索引属性的这些限制遵循对主键执行的一些限制。如果不存在这样的合适索引,则在订阅者端进行搜索可能会非常低效,因此只有在没有其他解决方案的情况下才应该使用副本标识 FULL
。如果在发布者端设置了除 FULL
之外的副本标识,那么在订阅者端也必须设置包含相同或更少列的副本标识。有关如何设置副本标识的详细信息,请参见 REPLICA IDENTITY
。如果将没有副本标识的表添加到复制 UPDATE
或 DELETE
操作的发布中,则后续的 UPDATE
或 DELETE
操作将在发布者端导致错误。无论任何副本标识如何,INSERT
操作都可以继续进行。
每个发布都可以有多个订阅者。
可以使用 CREATE PUBLICATION
命令创建发布,并且可以使用相应的命令对其进行修改或删除。
可以使用 ALTER PUBLICATION
动态添加和删除各个表。ADD TABLE
和 DROP TABLE
操作都是事务性的;因此,一旦事务提交,该表将开始或停止在正确快照处复制。
如果您在文档中发现任何错误,与您对特定功能的体验不符或需要进一步澄清,请使用 此表格 报告文档问题。