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

29.1. 发布 #

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

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

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

已发布的表必须配置一个副本标识,以便能够复制 UPDATEDELETE操作,从而在订阅方能够识别 需要更新或删除的适当行。默认情况下,如果存在主键,则使用主键。 也可以将另一个唯一索引(满足某些附加要求)设置为副本标识。 如果表没有任何合适的键,则可以将副本标识设置为FULL, 这意味着整行数据成为键。当指定副本标识为FULL时, 订阅方可以使用索引来搜索行。候选索引必须是btree或hash,非部分索引, 且最左边的索引字段必须是引用已发布表列的列(而非表达式)。 这些对非唯一索引属性的限制遵循主键强制执行的一些限制。 如果没有这样的合适索引,订阅方的搜索效率会非常低,因此只有在没有 其他解决方案时,才应将副本标识设置为FULL作为后备方案。 如果发布方设置了除FULL以外的副本标识,则订阅方也必须 设置包含相同或更少列的副本标识。有关如何设置副本标识的详细信息, 请参见REPLICA IDENTITY。如果将没有副本标识 的表添加到复制UPDATEDELETE操作的发布中, 则后续的UPDATEDELETE操作将在发布方 产生错误。INSERT操作无论副本标识如何都可以继续执行。

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

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

表可以使用ALTER PUBLICATION动态地增加或者移除。ADD TABLE以及DROP TABLE操作都是事务性的,因此一旦该事务提交,该表将以正确的快照开始或者停止复制。