31.4. Restrictions

逻辑复制当前具有以下限制或缺少功能。这些可能会在将来的版本中解决。

  • 数据库模式和 DDL 命令不会被复制。可以使用pg_dump --schema-only手动复制初始模式。随后的模式更改将需要手动保持同步。 (但是,请注意,架构的两端不必完全相同.)当实时数据库中的架构定义发生更改时,逻辑复制将很可靠:当发布服务器上的架构发生更改并且复制的数据开始到达时订阅服务器,但不适合表架构,在架构更新之前复制将出错。在许多情况下,可以通过首先将附加模式更改应用于订户来避免间歇性错误。

  • 序列数据不被复制。序列支持的序列或标识列中的数据当然将被复制为表的一部分,但是序列本身仍将在订户上显示起始值。如果将订户用作只读数据库,则通常应该没有问题。但是,如果打算进行某种形式的到订户数据库的切换或故障转移,则需要通过复制发布者的当前数据(也许使用pg_dump)或确定足够高的值来将序列更新为最新值。表本身的价值。

  • 支持TRUNCATE命令的复制,但是在截断由外键连接的表组时必须格外小心。复制截断操作时,订阅服务器将截断在发布服务器上被截断的同一组表,这些表组是显式指定的或通过CASCADE隐式收集的,减去了不属于订阅的表。如果所有受影响的表都属于同一预订,则此方法将正常工作。但是,如果某些要在订阅服务器上被截断的表具有指向不属于同一(或任何)订阅的表的外键链接,则在订阅服务器上应用截断操作将失败。

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

  • 仅可从基本表复制到基本表。也就是说,发布和预订端的表必须是普通表,而不是视图,实例化视图,分区根表或外部表。因此,在分区的情况下,您可以一对一地复制分区层次结构,但是当前不能复制到其他分区的设置。尝试复制基本表以外的表将导致错误。