【问题标题】:Logical Replication and Declarative Partitioning in PostgreSQL 11PostgreSQL 11 中的逻辑复制和声明式分区
【发布时间】:2019-05-02 10:38:36
【问题描述】:

我有一个包含 2 亿行的常规表 transactions

我决定使用逻辑复制将此表转换为声明性分区。

我在 node1 上创建了一个出版物,如下所示:

CREATE PUBLICATION transactions_pub FOR TABLE transactions;

当我尝试在 node2 上创建订阅时,如下所示:

CREATE SUBSCRIPTION transactions_sub CONNECTION 'host=x.x.x.x port=5432 password=123456 user=replicator dbname=mydbname' PUBLICATION transactions_pub;

返回此错误:

ERROR:  logical replication target relation "public.transactions" is not a table

是否可以使用逻辑复制将常规表复制到声明性分区表?

【问题讨论】:

    标签: postgresql replication database-partitioning postgresql-11 logical-replication


    【解决方案1】:

    不,逻辑复制无法从复制到声明性分区表。

    【讨论】:

    • 在这种情况下,如何在逻辑副本(订阅者)上重建声明性分区表?有没有办法可以创建主表?
    • 您可以将所有数据复制到订阅者,但这涉及到相当多的手动步骤。如果要复制分区表,请手动为每个分区创建发布和订阅。我在这里的注释中描述了一个示例:gitlab.com/snippets/1898229
    【解决方案2】:

    目前,逻辑复制仅适用于基表。

    this documentation page:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-10
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多