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

5

我有一张包含两亿行数据的普通表transactions

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

我在节点1上创建了一个发布(Publication),如下所示:

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

通过逻辑复制技术,是否可以将常规表复制到声明式分区表中?
2个回答

3
不,逻辑复制不能从声明式分区表复制数据到其他表或从其他表复制数据到声明式分区表。

在这种情况下,我该如何在逻辑副本(订阅者)上重建声明性分区表?我是否有办法重新创建主表? - William Yeung
您可以将所有数据复制到订阅者,但这涉及相当多的手动步骤。如果要复制分区表,请为每个分区手动创建出版物和订阅。我在此处的一个注释中描述了一个示例:https://gitlab.com/snippets/1898229 - amitlan

3

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

请参见此文档页面

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接