tencent cloud

文档反馈

使用 pglogical 进行逻辑复制

最后更新时间:2024-12-09 11:58:12
    pglogical 是 PostgreSQL 的插件,使用发布/订阅模型复制数据,使选择性复制更加高效。支持多场景复制,具体包括:
    数据库大版本升级。
    完整的数据库复制。
    利用复制集,选择性地筛选表、行、列。
    可从多个上游服务器,用于数据的聚集和合并。

    前提条件

    说明:
    如您需要使用 pglogical 插件,请您 提交工单 联系我们添加 shared_preload_libraries 参数。修改 shared_preload_libraries 参数会重启实例,请确保业务有重连机制。
    云数据库 PostgreSQL 支持同一地域下的同一实例或者不同实例间配置 pglogical 逻辑复制。
    当前只有内核版本在 v11.22_r1.21、v12.20_r1.24、v13.16_r1.19、v14.13_r1.26、v15.6_r1.13、v16.4_r1.7 及以上的云数据库 PostgreSQL 实例支持 pglogical 插件。
    请您确认 shared_preload_libraries 参数中包含 pglogical,如下图所示:
    postgres=> show shared_preload_libraries;
    shared_preload_libraries
    -------------------------------------------------------------------------------------------------------------------------
    -------------
    pg_stat_statements,pg_stat_log,wal2json,decoderbufs,decoder_raw,pg_hint_plan,rds_server_handler,tencentdb_pwdcheck,pgaud
    it,pglogical
    (1 row)
    参数 wal_level 的值为 logical,如下图所示。
    postgres=> show wal_level;
    wal_level
    -----------
    logical
    (1 row)
    如您需要修改 wal_level 参数,请您在 云数据库 PostgreSQL 的控制台,修改参数:
    

    操作步骤

    在发布端和订阅端实例确认可安装插件中是否有 pglogical:
    postgres=> select * from pg_available_extensions where name='pglogical';
    name | default_version | installed_version | comment
    -----------+-----------------+-------------------+--------------------------------
    pglogical | 2.4.4 | | PostgreSQL Logical Replication
    (1 row)

    安装插件

    在发布端和订阅端实例都要安装 pglogical 插件:
    postgres=> create extension pglogical;
    CREATE EXTENSION
    查询是否安装成功:
    postgres=> select * from pg_extension where extname='pglogical';
    oid | extname | extowner | extnamespace | extrelocatable | extversion | extconfig | extcondition
    -------+-----------+----------+--------------+----------------+------------+-----------+--------------
    16424 | pglogical | 16387 | 16423 | f | 2.4.4 | |
    (1 row)

    在发布端创建发布节点

    新建 database,名称为 am,并切换至 am:
    postgres=> create database am;
    CREATE DATABASE
    postgres=> \\c am
    psql (14.11, server 15.6)
    WARNING: psql major version 14, server major version 15.
    Some psql features might not work.
    You are now connected to database "am" as user "dbadmin".
    am=>
    创建表格 t,并插入数据:
    am=> create table t(a int primary key, b int);
    CREATE TABLE
    am=> insert into t(a,b)values(1,1),(2,2),(3,3);
    INSERT 0 3
    am=> select * from t;
    a | b
    ---+---
    1 | 1
    2 | 2
    3 | 3
    (3 rows)
    
    创建发布节点, dns 中参数请参考 文档。这里的参数均填写发布端所在实例信息。
    am=> SELECT pglogical.create_node(node_name := 'provider1',dsn := 'host=10.216.0.106 port=5432 dbname=am user=dbadmin password=Lxh202405! instanceid=postgres-gip4cpjw');
    create_node
    -------------
    2976894835
    (1 row)

    配置复制集

    如下示例是配置复制集中的一种,更多参数请参考 pglogical 官方文档
    am=> SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
    replication_set_add_all_tables
    --------------------------------
    t
    (1 row)

    在订阅端创建订阅节点

    在订阅端对应的 database 中创建表格:
    postgres=> \\c am
    psql (14.11, server 15.6)
    WARNING: psql major version 14, server major version 15.
    Some psql features might not work.
    You are now connected to database "am" as user "dbadmin".
    am=> create table t(a int primary key, b int);
    CREATE TABLE
    在订阅端创建节点,dns 中参数请参考 文档。这里的参数均填写订阅端所在实例信息。
    am=> SELECT pglogical.create_node(node_name := 'subscriber1',dsn := 'host=10.216.1.162 port=5432 dbname=am user=dbadmin password=Lxh202405! instanceid=postgres-70beu0ou');
    create_node
    -------------
    330520249
    (1 row)

    在订阅端创建订阅

    在订阅端创建节点,dns 中参数请参考 文档。这里的参数均填写发布端所在实例信息。
    am=> SELECT pglogical.create_subscription(subscription_name := 'subscription1',provider_dsn := 'host=10.216.0.106 port=5432 dbname=am user=dbadmin password=Lxh202405! instanceid=postgres-gip4cpjw');
    create_subscription
    ---------------------
    1763399739
    (1 row)
    校验目标端数据:
    am=> select * from t;
    a | b
    ---+---
    1 | 1
    2 | 2
    3 | 3
    (3 rows)
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持