PostgreSQL 11中的逻辑复制和声明性分区

时间:2018-11-30 09:30:51

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

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

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

我在node1上创建了一个发布,如下所示:

CREATE PUBLICATION transactions_pub FOR TABLE transactions;

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

请参见this documentation page

  

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