pglogical插件在postgresql12上的应用总结

举报
zenith 发表于 2021/01/05 14:18:05 2021/01/05
【摘要】 pglogical插件的使用在网上的帖子里讲的步骤比较混乱 很难一次成功。本文将介绍完整的步骤,以及遇到的坑,防止其他人踩坑

pglogical插件的使用在网上的帖子里讲的步骤比较混乱 很难一次成功。本文将介绍完整的步骤,以及遇到的坑,防止其他人踩坑。

环境准备:

  发布端:127.0.0.1 端口 5434

  订阅端: 127.0.0.1 端口 5436

步骤:

1. 发布端和订阅端分别创建扩展:

   CREATE EXTENSION pglogical;

2. 发布端创建node:

 SELECT pglogical.create_node(node_name := 'provider1',dsn := 'host=127.0.0.1 port=5434 user=postgres dbname=postgres');

  注意:如果要指定用户,user选项必须放在dbname的前边 其他位置不可以!

3. 发布端创建复制集:

SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);

4. 订阅端创建node

SELECT pglogical.create_node(node_name := 'subscriber1', dsn := 'host=127.0.0.1 port=5436 user=postgres dbname=postgres');

5. 订阅端创建订阅

SELECT pglogical.create_subscription(subscription_name := 'subscription1',provider_dsn := 'host=127.0.0.1 port=5434 user=postgres dbname=postgres');

注意: 此处的provider_dsn必须写成发布端的ip和端口 否则逻辑复制会失败 报各种奇怪错误。 网上很多帖子未强调这一点

6. 在发布端和订阅端分别创建要复制的表

create table test(id int primary key, name text, reg_time timestamp);

注意:发布端和订阅端的表必须名字、结构一致

7. 在发布端给表插入数据

insert into test select generate_series(1,10000),'test',now();

8. 在发布端将表加入复制集

 SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);    

注意: 这种是将所有的表加入到复制集 也可以只加指定的表:

select pglogical.replication_set_add_table( set_name := 'default', relation := 'test',synchronize_data := true);

9. 验证该表已经被加入到复制集

 select * from pglogical.replication_set_table ;

10. 订阅端查询订阅状态

select * from pglogical.show_subscription_table('subscription1','test');

注意:如果在第八步中采用的是第一种方式加入的复制集 那么在订阅端还需要执行以下步骤将数据同步:

 select pglogical.alter_subscription_synchronize('subscription1');

否则数据无法到达订阅端 订阅状态是unknown

如果采用的是第二种方式,则默认会自动同步

这也是一个大坑!!!

11. 订阅端查看表数据是否同步 

select count(*) from test;

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。