发布可以定义在任何物理复制主库上。定义发布的节点称为 发布者。发布是一组由某个表或一组表产生的变更,也可称为 变更集或复制集。每个发布只存在于一个数据库中。
发布与模式不同,不影响表的访问方式。每个表在需要时都可以加入多个发布。 发布目前只能包含表以及模式中的所有表。除非创建发布时使用 ALL TABLES,否则对象必须显式添加。
发布可以选择将要产生的变更限制为 INSERT、UPDATE、 DELETE 和 TRUNCATE 的任意组合,类似于触发器按特定事件类型触发。默认会复制所有操作类型。 这些发布规范只适用于 DML 操作;不影响初始数据同步复制。 (行过滤器对 TRUNCATE 无效。见 Section 29.3)。
每个发布都可以有多个订阅者。
使用 CREATE PUBLICATION 命令创建发布,之后可使用对应命令修改或删除。
单个表可以使用 ALTER PUBLICATION 动态添加和移除。ADD TABLE 与 DROP TABLE 都是事务性的,因此事务提交后,表会在正确的快照点开始或停止复制。
已发布的表若要复制 UPDATE 和 DELETE 操作,必须配置 复制标识,以便在订阅端识别应更新或删除的行。
默认情况下,如果存在主键,则主键就是复制标识。也可以将另一个唯一索引 (满足某些附加要求)设置为复制标识。如果表没有合适的键,可将复制标识设为 FULL,表示整行作为键。指定复制标识 FULL 时,订阅端在查找行时可以使用索引。 候选索引必须是 btree 或 hash、非部分索引,且最左索引字段必须是引用已发布表 列的列(而非表达式)。这些非唯一索引属性的限制,遵循了主键的一部分限制规则。 如果没有合适索引,订阅端查找会非常低效,因此复制标识 FULL 仅应在没有其他方案时作为后备选项。
如果发布端设置的是非 FULL 的复制标识,则订阅端也必须设置 由相同或更少列组成的复制标识。
对于复制标识定义为 NOTHING、无主键时的 DEFAULT,或使用已删除索引的 USING INDEX 的表,如果将其包含在复制 UPDATE 或 DELETE 的发布中,则不支持这些操作。尝试执行时会在发布端报错。
无论复制标识如何,INSERT 操作都可以继续执行。
关于如何设置复制标识,见 ALTER TABLE...REPLICA IDENTITY。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。