1

我正在尝试将 postgresql 数据库从提供者节点复制到订阅者节点。我遵循了http://bonesmoses.org/2016/10/14/pg-phriday-perfectly-logical/中的教程并创建了提供程序节点并向复制集添加了一个表,并类似地创建了订阅者来订阅此表和订阅是为此工作正常。之后我添加了几个表,它们是不同数据库的一部分,但在同一个 postgres 实例上,并将这些表添加到新的复制集中,但是对于这个集,复制不起作用,并且订阅者正在关闭这个集。我怎样才能使这个订阅成为我稍后添加的复制集的复制。

以下是我在提供程序节点上运行的命令:

第 1 步:运行 pg_dump 文件以导入 DDL 命令

psql -U postgres -d databasename1 < exportDDL.pgsql

第 2 步:创建提供程序节点

SELECT pglogical.create_node(
node_name := 'db_provider',
dsn := 'host=docker-container-ip port=5432 dbname=databasename1'

);

第 3 步:创建复制状态

SELECT pglogical.create_replication_set(
set_name := 'qrtz',
replicate_insert := TRUE, replicate_update := TRUE,
replicate_delete := TRUE, replicate_truncate := TRUE);

第 4 步:向该集合添加三个表

SELECT pglogical.replication_set_add_table(
set_name := 'qrtz', relation := ‘qrtz_logs', 
synchronize_data := TRUE);

SELECT pglogical.replication_set_add_table(
set_name := 'qrtz', relation := ‘qrtz_errors', 
synchronize_data := TRUE);

SELECT pglogical.replication_set_add_table(
set_name := 'qrtz', relation := ‘qrtz_calendars', 
synchronize_data := TRUE);

订阅者节点:

第 1 步:使用 pg_dump 文件运行 DDL 命令

psql -U postgres -d postgres < exportDDL.pgsql

第 2 步:创建订阅者节点

SELECT pglogical.create_node(
node_name := 'db_subscriber',
dsn := 'host=docker-container-ip port=5432 dbname=postgres');

第 3 步:创建订阅

SELECT pglogical.create_subscription(subscription_name := 'qrtz_data’,  
replication_sets := array['qrtz'],
 provider_dsn := 'host=provider-docker-container-ip port=5432 
 dbname=databasename1');

第 4 步:使用检查状态

Select * from pglogical.show_subscription_status

它显示订阅 qrtz_data 的状态为关闭

4

1 回答 1

2

Down 表示订阅没有成功:通常有一些问题。检查 Postgres 日志中的错误。解决错误后,通过删除并重新创建订阅来重新创建订阅。检查状态。如果再次关闭,请再次检查错误日志。继续迭代,直到状态为initializingthen replicating

于 2019-03-14T00:08:54.980 回答