2

我尝试使用 pglogical 设置一个简单的主 > 从复制。pglogical文档提到需要一个主键来复制更新和删除。由于我一个都不需要,所以我在提供者处设置了一个复制集,如下所示:

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”在没有任何主键的情况下工作,但我想使用我自己的复制集。

有点题外话:您甚至会建议将 pglogical 用于简单的多个主服务器 > 特定表的一个从服务器复制(=聚合)?由于postgres 10逻辑复制无论如何都是核心的一部分。

4

1 回答 1

1

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

于 2018-02-06T10:23:19.380 回答