如何将订阅状态从关闭更改为复制
How to change subscription status from down to replicating
我正在尝试将 postgresql 数据库从提供者节点复制到订阅者节点。
我遵循了 http://bonesmoses.org/2016/10/14/pg-phriday-perfectly-logical/ 中的教程并创建了提供者节点并向复制集添加了一个 table 并类似地创建了订阅者以订阅此 table 和订阅为此工作正常。
我在那之后又添加了几个 tables,它们属于不同的数据库,但在同一个 postgres 实例上,并将这些 tables 添加到新的复制集,但是对于这个复制集,复制不起作用,订阅者来了这一套下来。
我怎样才能使这个订阅成为我稍后添加的复制集的复制。
下面是我在 provider 节点上 运行 的命令:
第 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 步:向此集合添加了三个 tables
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
它显示状态为 down 订阅 qrtz_data
down表示订阅没有成功:一般是有问题。检查 Postgres 日志中的错误。解决错误后,通过删除并再次创建订阅来重新创建订阅。检查状态。如果再次宕机,请再次检查错误日志。继续迭代,直到状态为 initializing
然后是 replicating
.
我正在尝试将 postgresql 数据库从提供者节点复制到订阅者节点。 我遵循了 http://bonesmoses.org/2016/10/14/pg-phriday-perfectly-logical/ 中的教程并创建了提供者节点并向复制集添加了一个 table 并类似地创建了订阅者以订阅此 table 和订阅为此工作正常。 我在那之后又添加了几个 tables,它们属于不同的数据库,但在同一个 postgres 实例上,并将这些 tables 添加到新的复制集,但是对于这个复制集,复制不起作用,订阅者来了这一套下来。 我怎样才能使这个订阅成为我稍后添加的复制集的复制。
下面是我在 provider 节点上 运行 的命令:
第 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 步:向此集合添加了三个 tables
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
它显示状态为 down 订阅 qrtz_data
down表示订阅没有成功:一般是有问题。检查 Postgres 日志中的错误。解决错误后,通过删除并再次创建订阅来重新创建订阅。检查状态。如果再次宕机,请再次检查错误日志。继续迭代,直到状态为 initializing
然后是 replicating
.