如何将订阅状态从简化更改为复制

时间:2018-02-15 16:28:14

标签: postgresql pglogical

我正在尝试将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

显示状态为 down

1 个答案:

答案 0 :(得分:1)

Down表示订阅未成功:通常存在一些问题。检查Postgres日志中的错误。解决错误后,请删除并重新创建订阅,以重新创建订阅。检查状态。如果再次下降,请再次检查错误日志。继续进行迭代,直到状态为initializing,然后为replicating