暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pglogical插件在postgresql12上的应用总结

原创 GaussDB数据库 2022-01-04
822

文章转自华为云社区,作者:zenith;原文链接:https://bbs.huaweicloud.com/blogs/235228

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的前边 其他位置不可以!

  1. 发布端创建复制集:
    SELECT pglogical.replication_set_add_all_tables(‘default’, ARRAY[‘public’]);

  2. 订阅端创建node
    SELECT pglogical.create_node(node_name := ‘subscriber1’, dsn := ‘host=127.0.0.1 port=5436 user=postgres dbname=postgres’);

  3. 订阅端创建订阅
    SELECT pglogical.create_subscription(subscription_name := ‘subscription1’,provider_dsn := ‘host=127.0.0.1 port=5434 user=postgres dbname=postgres’);

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

  1. 在发布端和订阅端分别创建要复制的表
    create table test(id int primary key, name text, reg_time timestamp);

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

  1. 在发布端给表插入数据
    insert into test select generate_series(1,10000),‘test’,now();

  2. 在发布端将表加入复制集
    SELECT pglogical.replication_set_add_all_tables(‘default’, ARRAY[‘public’]);

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

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

  1. 验证该表已经被加入到复制集
    select * from pglogical.replication_set_table ;

  2. 订阅端查询订阅状态
    select * from pglogical.show_subscription_table(‘subscription1’,‘test’);

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

select pglogical.alter_subscription_synchronize(‘subscription1’);

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

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

这也是一个大坑!!!

  1. 订阅端查看表数据是否同步
    select count(*) from test;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论