是否可以在 postgresql 中只复制一个模式?
Is it possible to replicate just one schema in postgresql?
注意:有人问过类似的问题,但没有在这里回答:How do I replicate a single schema in postgresql?
我正在尝试使用 pglogical 将 postgresql (13) 数据库中的一个模式复制到另一台服务器。
在提供者节点上的测试设置中,我有 2 个模式“共享”和“not_shared”。
在订阅者节点上,我有一个名为“not_shared”的现有模式。
我想将“共享”从提供者复制到订阅者,我已经在两台服务器上设置了节点。
在提供程序上,我为名为“shared_repl”的“共享”模式(理论上)创建了一个复制集:
select pglogical.create_replication_set('shared_repl', true, true, true, true );
SELECT pglogical.replication_set_add_all_tables('shared_repl', '{shared}'::text[]);
在订阅者上,我创建了对“shared_repl”复制集的订阅:
SELECT pglogical.create_subscription(
subscription_name := 'shared',
provider_dsn := 'host=providerhost port=5432 dbname=db user=myuser password=mypassword',
replication_sets := '{shared_repl}'::text[], synchronize_structure := TRUE
);
查看此订阅显示为“关闭”的状态:
select * from pglogical.show_subscription_status();
查看日志,我看到类似这样的内容:
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 5; 2615 16863 SCHEMA not_shared myuser
pg_restore: error: could not execute query: ERROR: schema "not_shared" already exists
Command was: CREATE SCHEMA not_shared;
那么,当我专门只选择了“共享”架构时,它为什么要尝试复制“not_shared”架构?
我是不是做错了什么或者 pglogical 不能只复制一个模式?
如果 pglogical 不允许这样做,是否有一些其他选项可以复制,包括结构,postgresql 中的一个模式?
谢谢。
synchronize_structure 只是 doesn't do what you want。您可以自己将一个模式的结构从提供者复制到订阅者,例如使用 pg_dump -n shared -s
,然后在创建订阅时不要指定 synchronize_structure := TRUE
。
注意:有人问过类似的问题,但没有在这里回答:How do I replicate a single schema in postgresql?
我正在尝试使用 pglogical 将 postgresql (13) 数据库中的一个模式复制到另一台服务器。
在提供者节点上的测试设置中,我有 2 个模式“共享”和“not_shared”。
在订阅者节点上,我有一个名为“not_shared”的现有模式。
我想将“共享”从提供者复制到订阅者,我已经在两台服务器上设置了节点。
在提供程序上,我为名为“shared_repl”的“共享”模式(理论上)创建了一个复制集:
select pglogical.create_replication_set('shared_repl', true, true, true, true );
SELECT pglogical.replication_set_add_all_tables('shared_repl', '{shared}'::text[]);
在订阅者上,我创建了对“shared_repl”复制集的订阅:
SELECT pglogical.create_subscription(
subscription_name := 'shared',
provider_dsn := 'host=providerhost port=5432 dbname=db user=myuser password=mypassword',
replication_sets := '{shared_repl}'::text[], synchronize_structure := TRUE
);
查看此订阅显示为“关闭”的状态:
select * from pglogical.show_subscription_status();
查看日志,我看到类似这样的内容:
pg_restore: while PROCESSING TOC:
pg_restore: from TOC entry 5; 2615 16863 SCHEMA not_shared myuser
pg_restore: error: could not execute query: ERROR: schema "not_shared" already exists
Command was: CREATE SCHEMA not_shared;
那么,当我专门只选择了“共享”架构时,它为什么要尝试复制“not_shared”架构?
我是不是做错了什么或者 pglogical 不能只复制一个模式?
如果 pglogical 不允许这样做,是否有一些其他选项可以复制,包括结构,postgresql 中的一个模式?
谢谢。
synchronize_structure 只是 doesn't do what you want。您可以自己将一个模式的结构从提供者复制到订阅者,例如使用 pg_dump -n shared -s
,然后在创建订阅时不要指定 synchronize_structure := TRUE
。