选择 打开 改范围 完整检索页
受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10
当前 PostgreSQL 版本不在支持生命周期内。
您可以参阅当前版本的对应页面,或其他在上面列出的活跃大版本。

30.4. 限制 #

逻辑复制目前有以下限制或缺失的功能。这些问题可能会在未来的版本中解决。

  • 数据库模式和DDL命令不会被复制。初始模式可使用pg_dump --schema-only手动复制。后续的模式变更需要手动保持同步。(注意,两端的模式不需要完全相同。)当数据库模式在运行中发生变更时,逻辑复制是健壮的:当发布端模式变更后,复制的数据开始到达订阅端但不符合表的模式时,复制会出错,直到模式被更新。在很多情况下,通过先在订阅端应用增量式模式变更,可以避免间歇性错误。

  • 序列数据不会被复制。由序列支撑的serial或标识列中的数据当然会作为表的一部分被复制,但序列本身在订阅端仍然显示起始值。如果把订阅端用作只读数据库,通常不会有问题。但如果打算切换或故障切换到订阅端数据库,则需要把序列更新到最新值,可以通过从发布端复制当前数据(例如使用pg_dump),或者从表本身确定一个足够大的值。

  • 支持TRUNCATE命令的复制,但在截断由外键连接的表组时需要注意。当复制truncate操作时,订阅端将截断与发布端截断的同一组表(显式指定的或通过CASCADE隐式收集的),但不包括不属于该订阅的表。如果所有受影响的表都属于同一个订阅,这将正确工作。但如果订阅端要被截断的某些表对不属于同一(或任何)订阅的表有外键链接,那么在订阅端应用truncate操作将失败。

  • 大对象(见Chapter 34)不会被复制。除了将数据存储在普通表中之外,没有其他解决方案。

  • 只能从基表复制到基表。也就是说,发布端和订阅端的表必须都是普通表,不能是视图、物化视图、分区根表或外部表。因此,对于分区,可以一对一复制分区层次结构,但目前还不能复制到采用不同分区方式的目标。尝试复制基表以外的表会导致错误。