注意:有人问过类似的问题,但这里没有回答:如何在 postgresql 中复制单个模式?
我正在尝试使用 pglogical 将 postgresql (13) 数据库中的一个模式复制到另一台服务器。
在提供程序节点上的测试设置中,我有 2 个模式“共享”和“非共享”。
在订阅者节点上,我有一个名为“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 中的一个模式?
谢谢。