31.1. 发布

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

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

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

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

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

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

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