我尝试使用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“在没有任何主键的情况下工作,但我想使用我自己的复制集。
有点离题:对于简单的多主机复制而不是特定表的一个从复制(= aggregation),您会推荐使用pglogical吗?因为postgres 10逻辑复制无论如何都是核心的一部分。
发布于 2018-02-06 18:23:19
为此,您不需要自定义复制集,已有用于此目的的预先存在的default_insert_only集。查看pglogical docs中的"2.4复制集“一章。
https://stackoverflow.com/questions/48626089
复制相似问题