支持的版本: 当前 (17) / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10

29.1. 发布 #

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

发布与模式不同,不会影响表的访问方式。如果需要,每个表可以添加到多个发布中。发布当前只能包含表和模式中的所有表。对象必须显式添加,除非为ALL TABLES创建发布。

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

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

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

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

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

提交更正

如果您在文档中发现任何不正确的内容、与特定功能的体验不符或需要进一步澄清的地方,请使用此表单报告文档问题。