逻辑复制目前有以下限制或缺失的功能。这些问题可能会在未来的版本中解决。
数据库模式和DDL命令不会被复制。初始模式可使用pg_dump --schema-only手动复制。后续的模式变更需要手动保持同步。(注意,两端的模式不需要完全相同。)当数据库模式在运行中发生变更时,逻辑复制是健壮的:当发布端模式变更后,复制的数据开始到达订阅端但不符合表的模式时,复制会出错,直到模式被更新。在很多情况下,通过先在订阅端应用增量式模式变更,可以避免间歇性错误。
序列数据不会被复制。由序列支撑的serial或标识列中的数据当然会作为表的一部分被复制,但序列本身在订阅端仍然显示起始值。如果把订阅端用作只读数据库,通常不会有问题。但如果打算切换或故障转移到订阅端数据库,则需要把序列更新到最新值,可以通过从发布端复制当前数据(例如使用pg_dump),或者从表本身确定一个足够大的值。
支持TRUNCATE命令的复制,但在截断由外键连接的表组时需要注意。当复制truncate操作时,订阅端将截断与发布端截断的同一组表(显式指定的或通过CASCADE隐式收集的),但不包括不属于该订阅的表。如果所有受影响的表都属于同一个订阅,这将正确工作。但如果订阅端要被截断的某些表对不属于同一(或任何)订阅的表有外键链接,那么在订阅端应用truncate操作将失败。
大对象(见Chapter 33)不会被复制。除了将数据存储在普通表中之外,没有其他解决方案。
只有表(包括分区表)支持复制。尝试复制其他类型的关系(如视图、物化视图或外部表)将导致错误。
在分区表之间进行复制时,实际的复制默认源自发布端的叶分区,因此发布端的分区在订阅端也必须作为有效的目标表存在。(它们可以本身是叶分区,也可以进一步子分区,甚至可以是独立的表。)发布也可以指定使用分区根表的标识和模式来复制变更,而不使用变更实际发生的各个叶分区的标识和模式(见CREATE PUBLICATION)。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。