云数据库 PostgreSQL 使用 pglogical 进行逻辑复制

pglogical 是 PostgreSQL 的逻辑复制扩展插件,使用“发布/订阅”的数据模型进行数据复制。该模型包含“发布端”和“订阅端”,发布端用于定义和发布指定的数据,订阅端可以选择订阅,从而接收并使用数据变更。pglogical 允许用户只复制特定的数据内容,减少了不必要的数据传输和处理,使选择性复制更加高效。

相关产品
云数据库 PostgreSQL 产品页,含版本规格、价格与购买入口。

pglogical 的复制可应用于多种场景,包括:

·数据库大版本升级。

·完整的数据库复制。

·利用复制集,选择性地筛选表、行、列。

·可从多个上游服务器,用于数据的聚集和合并。

前提条件

注意:说明:

进入 云数据库 PostgreSQL 控制台 的参数设置页面,修改参数 shared_preload_libraries 和 wal_level。

在 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,pgaudit,pglogical(1 row)

参数 wal_level 的值为 logical。

在数据库中直接查询,结果如下。

postgres=> show wal_level; wal_level ———– logical(1 row)

操作步骤

在发布端和订阅端实例确认可安装插件中是否有 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)

一、安装插件

新建 database,名称为 am,并切换至 am:

postgres=> create database am;CREATE DATABASEpostgres=> \\c amYou are now connected to database "am" as user "dbadmin".am=>

创建表格 t,并插入数据:

am=> create table t(a int primary key, b int);CREATE TABLEam=> insert into t(a,b)values(1,1),(2,2),(3,3);INSERT 0 3am=> select * from t; a | b —+— 1 | 1 2 | 2 3 | 3(3 rows)

在发布端和订阅端实例都要执行以下命令,创建 pglogical 插件:

am=> create extension pglogical;CREATE EXTENSION

可使用以下命令查询是否安装成功:

am=> 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)

二、在发布端创建发布节点

创建发布节点, dns 中参数请参考 跨库访问。这里的参数均填写发布端所在实例信息。

am=> SELECT pglogical.create_node(node_name := 'provider1',dsn := 'host=10.*.*.* port=5432 dbname=am user=**** password=**** instanceid=postgres-****** uin=********'); create_node ————- 2976894835(1 row)

三、配置复制集

如下示例是配置复制集中的一种,使用 pglogical_republication_set_add_all_tables 函数,将指定 schema 下的所有表添加到指定的复制集中。’default’指复制集的名称,可自定义,此处使用默认的复制集名称;’public’指要发布的表所在的 schema 名称,此处为 public。

更多参数请参考 pglogical 产品文档。

am=> SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']); replication_set_add_all_tables ——————————– t(1 row)

四、在订阅端创建订阅节点

在订阅端对应的 database 中创建表格:

postgres=> \\c ampsql (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.*.*.* port=5432 dbname=am user=**** password=**** instanceid=postgres-***** uin=*******'); create_node ————- 330520249(1 row)

五、在订阅端创建订阅

在订阅端创建节点,dns 中参数请参考 跨库访问。这里的参数均填写发布端所在实例信息。

am=> SELECT pglogical.create_subscription(subscription_name := 'subscription1',provider_dsn := 'host=10.*.*.* port=5432 dbname=am user=**** password=**** instanceid=postgres-**** uin=*******'); create_subscription ——————— 1763399739(1 row)

在订阅端查询表,校验目标端数据。若查询结果与发布端数据一致,则逻辑复制成功:

am=> select * from t; a | b —+— 1 | 1 2 | 2 3 | 3(3 rows)

赞 (0)
上一篇 4天前
下一篇 4天前