31.1. 发布
可以在任何物理复制主机上定义发布。 定义发布的节点称为发布者。 发布是从一个表或一组表中生成的一组更改,也可能被描述为更改集或复制集。 每个发布只存在于一个数据库中。
发布与模式不同,不影响表格的访问方式。如果需要,每张表可以添加到多个发布。 发布目前可能只包含表。对象必须显式添加, 除非为ALL TABLES
创建了一个发布。
发布可以选择将它们所产生的改变限制在INSERT
, UPDATE
和DELETE
的任意组合上, 类似于触发器被特定事件类型触发。默认情况下,复制所有操作类型。
已发布的表格必须配置一个“副本标识”以便能够复制 UPDATE
和DELETE
操作, 这样可以在订阅者端识别适当的行来更新或删除。默认情况下,这是主键, 如果有的话。另外唯一的索引(有一些额外的要求)也可以被设置为副本标识。 如果表没有任何合适的键,那么它可以设置为复制标识“full”, 这意味着整个行成为键。但是,这是非常低效的, 并且只能在没有其他可能的解决方案时用作后备。 如果发布者端设置了除“full”之外的副本标识, 则还必须在订阅者端设置包含相同或更少列的副本标识。 有关如何设置副本标识的详细信息,请参见REPLICA IDENTITY
。 如果没有副本标识的表被添加到复制UPDATE
或DELETE
操作的发布中,则后续的UPDATE
或DELETE
操作会在发布者上造成错误。无视副本标识,INSERT
操作都可以进行。
每个发布可以有多个订阅者。
使用CREATE PUBLICATION命令创建发布,稍后可以使用对应的命令修改或删除。
使用ALTER PUBLICATION可以动态的添加或删除单个表。 ADD TABLE
和DROP TABLE
操作都是事务型的; 所以一旦事务提交,表就会启动或停止在正确的快照上复制。
本文转自PostgreSQL中文社区,原文链接:31.1. 发布