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

31.4. 限制 #

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

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

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

  • TRUNCATE 命令不会被复制。当然,可以改用 DELETE 来绕过这一限制。为避免意外调用 TRUNCATE,可以撤销表上的 TRUNCATE 权限。

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

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