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

29.1. 发布 #

29.1.1. 副本标识

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

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

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

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

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

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

29.1.1. 副本标识 #

发布的表必须配置一个副本标识 才能复制UPDATEDELETE操作, 以便在订阅者端能够识别出适当的行进行更新或删除。

默认情况下,如果存在主键,则使用主键。也可以设置另一个唯一索引 (具有某些附加要求)作为副本标识。如果表没有任何合适的键,则可以 将副本标识设置为FULL,这意味着整个行 成为键。当指定副本标识FULL时,可以在 订阅者端使用索引来搜索行。候选索引必须是btree或hash, 非部分的,并且最左侧的索引字段必须是引用发布表列的列(而不是表达式)。 这些对非唯一索引属性的限制遵循对主键强制的一些限制。 如果没有这样的合适索引,则在订阅者端的搜索可能非常低效, 因此副本标识FULL应仅在没有其他解决方案时作为后备使用。

如果在发布者端设置了除 FULL 以外的副本标识, 则在订阅者端也必须设置包含相同或更少列的副本标识。

定义为 NOTHING、没有主键的 DEFAULT, 或者使用已删除索引的 USING INDEX 的表, 在包含这些操作的发布中无法支持 UPDATEDELETE 操作。尝试此类操作将在发布者上导致错误。

INSERT 操作可以在任何副本标识下进行。

有关如何设置副本标识的详细信息,请参见 ALTER TABLE...REPLICA IDENTITY