9.3 9.4 9.5 9.6 10 11 12 13 14 Current(15)
阿里云PostgreSQL 问题报告 纠错本页面

31.1. 发布

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

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

发布可以选择将它们所产生的改变限制在INSERTUPDATEDELETE的任意组合上, 类似于触发器被特定事件类型触发。默认情况下,复制所有操作类型。

已发布的表格必须配置一个副本标识以便能够复制 UPDATEDELETE操作, 这样可以在订阅者端识别适当的行来更新或删除。默认情况下,这是主键, 如果有的话。另外唯一的索引(有一些额外的要求)也可以被设置为副本标识。 如果表没有任何合适的键,那么它可以设置为复制标识full, 这意味着整个行成为键。但是,这是非常低效的, 并且只能在没有其他可能的解决方案时用作后备。 如果发布者端设置了除full之外的副本标识, 则还必须在订阅者端设置包含相同或更少列的副本标识。 有关如何设置副本标识的详细信息,请参见REPLICA IDENTITY。 如果没有副本标识的表被添加到复制UPDATEDELETE 操作的发布中,则后续的UPDATEDELETE 操作会在发布者上造成错误。无视副本标识,INSERT操作都可以进行。

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

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

使用ALTER PUBLICATION可以动态的添加或删除单个表。 ADD TABLEDROP TABLE操作都是事务型的; 所以一旦事务提交,表就会启动或停止在正确的快照上复制。