逻辑复制目前有以下限制或缺少的功能。 这些可能会在未来的版本中解决。
不复制数据库模式和DDL命令。初始模式可以使用pg_dump --schema-only
手动复制。后续的模式更改需要手动保持同步。(但是请注意,
两端的架构不需要完全相同。)当实时数据库中的模式定义更改时,逻辑复制是健壮的:
当模式在发布者上发生更改并且复制的数据开始到达订阅者但不符合表模式,
复制将错误,直到模式更新。在很多情况下,
间歇性错误可以通过首先将附加模式更改应用于订阅者来避免。
不复制序列数据。序列支持的序列或标识列中的数据当然会作为表的一部分被复制,
但序列本身仍然会显示订阅者的起始值。如果订阅者被用作只读数据库,
那么这通常不成问题。但是,如果打算对订阅者数据库进行某种切换或故障切换,
则需要将序列更新为最新值,方法是从发布者复制当前数据
(可能使用pg_dump
)或者从表中确定足够高的值。
不复制TRUNCATE
命令。当然,可以通过使用DELETE
来解决。为了避免意外的TRUNCATE
调用,可以撤销表的
TRUNCATE
权限。
不复制大对象(参阅第 34 章)。 没有什么解决办法,除非在普通表中存储数据。
复制只能从基表到基表。也就是说,发布和订阅端的表必须是普通表,而不是视图, 物化视图,分区根表或外部表。对于分区,您可以一对一地复制分区层次结构, 但目前不能复制到不同的分区设置。尝试复制基表以外的表将导致错误。