Redrock Postgres 搜索 英文
版本: 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

29.1. 发布 #

可以在任何物理复制主节点上定义发布。定义发布的节点称为发布者。发布是由某个表或一组表生成的变更集合,也可以将其描述为变更集或复制集。每个发布仅存在于一个数据库中。

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

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

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

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

发布是使用 CREATE PUBLICATION 命令创建的,并且随后可以使用相应的命令对其进行更改或删除。

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