pglogical是一个完全作为PostgreSQL扩展实现的逻辑复制系统,为PostgreSQL数据库提供了逻辑流复制发布和订阅的功能。

前提条件

RDS PostgreSQL实例需为以下版本之一:
  • PostgreSQL 13
  • PostgreSQL 12
  • PostgreSQL 11
  • PostgreSQL 10

背景信息

pglogical是PostgreSQL的拓展模块,使用发布/订阅模型复制数据,使选择性复制更加高效。提供比Slony、Bucardo或Londiste更快的复制速度,支持跨版本升级。支持多场景复制,具体包括:
  • 数据库大版本升级。
  • 完整的数据库复制。
  • 利用复制集,选择性地筛选表、行、列。
  • 可从多个上游服务器,做数据的聚集和合并。

使用插件

  • 开启pglogical。
    CREATE EXTENSION pglogical;
  • 关闭pglogical。
    DROP EXTENSION pglogical;

快速配置逻辑流复制

  1. 创建发布节点。
    SELECT pglogical.create_node(
        node_name := 'provider1',
        dsn := 'host=providerhost port=5432 dbname=db'
    );
  2. 配置复制集。

    将public中的所有表添加到default复制集。

    SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
    说明
    • 复制集用来控制将发布节点数据库中的哪些表以及这些表上的哪些操作发布给订阅者。
    • default复制集表示发布所有表及这些表的所有操作。更多复制集定义请参见pglogical官方文档
  3. 创建订阅节点。
    SELECT pglogical.create_node(
        node_name := 'subscriber1',
        dsn := 'host=thishost port=5432 dbname=db'
    );
  4. 创建订阅。

    创建订阅后,将在后台启动同步和复制流程。

    SELECT pglogical.create_subscription(
        subscription_name := 'subscription1',
        provider_dsn := 'host=providerhost port=5432 dbname=db'
    );
    
    SELECT pglogical.wait_for_subscription_sync_complete('subscription1');

相关参考

pglogical的详细说明,请参见pglogical官方文档