是使用pglogical复制插入所必需的主键吗?

时间:2018-02-05 15:37:02

标签: postgresql replication pglogical

我尝试设置一个简单的主人>使用pglogical进行从属复制。 pglogical docs提到需要主密钥来复制更新和删除。由于我不需要任何一个,我在提供者处设置了一个复制集,如下所示:

SELECT pglogical.create_replication_set(
set_name := 'all_remote_tables', 
replicate_insert := true, 
replicate_update := false,
replicate_delete := false,
replicate_truncate := false);

然后我添加了我的表格:

SELECT pglogical.replication_set_add_table(
set_name := 'all_remote_tables',
relation := 'measurements',
synchronize_data := true);

我的订阅者设置如下:

SELECT pglogical.create_subscription(
subscription_name := 'testsubscription1',
provider_dsn := 'host=$host port=$port dbname=$dbname user=$user password=$pw', 
replication_sets := array['all_remote_tables'],
synchronize_structure := true,
synchronize_data := true,
forward_origins := '{}');

使用此设置和这样的表格布局:

CREATE TABLE "measurements"(    
time        TIMESTAMP WITH TIME ZONE NOT NULL,   
value       NUMERIC,
sensor_id   TEXT);

只复制结构。

只要添加主键:

CREATE TABLE "measurements"(            
id          SERIAL PRIMARY KEY, 
time        TIMESTAMP WITH TIME ZONE NOT NULL,   
value       NUMERIC,
sensor_id   TEXT);

一切都按预期工作。

由于我想存储高频时间序列(使用timescaledb)并且永远不需要更新/删除单行,所以我不会在这里看到主键的好处。因此,我想知道pglogical是否在没有主键的情况下无法正常工作,或者我是否进行了一些错误配置。

预建复制集" default_insert_only"没有任何主键,但我想使用自己的复制集。

有点offtopic:你甚至建议使用pglogical用于简单的多个主人>特定表的一个从属复制(= aggregation)?因为postgres 10逻辑复制无论如何都是核心的一部分。

1 个答案:

答案 0 :(得分:0)

您不需要为此设置自定义复制,为此目的设置了预先存在的default_insert_only。检查pglogical docs中的“2.4复制集”一章。