tencent cloud

云数据库 PostgreSQL

动态与公告
产品动态
产品简介
产品概述
产品特性
产品优势
应用场景
信息安全说明
地域和可用区
产品功能列表
大版本生命周期说明
MSSQL 兼容版
产品计费
计费概述
实例类型与规格
购买方式
退费说明
欠费说明
备份空间收费说明
快速入门
创建 PostgreSQL 实例
连接 PostgreSQL 实例
管理 PostgreSQL 实例
数据导入
通过 DTS 迁移数据
内核能力介绍
内核版本概述
内核版本更新动态
查看内核版本
自研内核功能介绍
数据库审计
审计服务说明
开通审计服务
查看审计日志
修改审计服务
审计性能说明
用户指南
实例管理
升级实例
CPU 弹性扩容
只读实例
账号管理
数据库管理
参数管理
日志管理及分析
备份与恢复
数据迁移
插件管理
网络管理
访问管理
数据安全
租户及资源隔离
安全组
监控与告警
标签
AI 实践
使用 tencentdb_ai 插件调用大模型
使用 tencentdb_ai 插件构建 AI 应用
结合 Supabase 快速构建基于云数据库 PostgreSQL 的后端服务
实践教程
跨库访问
如何在 PostgreSQL 中自动创建分区
基于 pg_roaringbitmap 实现超大规模标签查找
一条 SQL 实现查询附近的人
如何配置云数据库 PostgreSQL 作为 GitLab 外部数据源
通过 cos_fdw 插件支持分级存储能力
通过 pgpool 实现读写分离
通过 auto_explain 插件实现慢 SQL 分析
使用 pglogical 进行逻辑复制
使用 Debezium 采集 PostgreSQL 数据
在 CVM 本地搭建 PostgreSQL 异地灾备环境
只读实例与只读组实践教程
如何使用云函数定时操作数据库
表膨胀处理
性能白皮书
测试方法
测试结果
API 文档
History
Introduction
API Category
Making API Requests
Instance APIs
Read-only Replica APIs
Backup and Recovery APIs
Parameter Management APIs
Security Group APIs
Performance Optimization APIs
Account APIs
Specification APIs
Network APIs
Data Types
Error Codes
常见问题
相关协议
Service Level Agreement
Terms of Service
词汇表
联系我们
文档云数据库 PostgreSQL实践教程使用 pglogical 进行逻辑复制

使用 pglogical 进行逻辑复制

PDF
聚焦模式
字号
最后更新时间: 2025-05-21 15:58:06
pglogical 是 PostgreSQL 的逻辑复制扩展插件,使用“发布/订阅”的数据模型进行数据复制。该模型包含“发布端”和“订阅端”,发布端用于定义和发布指定的数据,订阅端可以选择订阅,从而接收并使用数据变更。pglogical 允许用户只复制特定的数据内容,减少了不必要的数据传输和处理,使选择性复制更加高效。
pglogical 的复制可应用于多种场景,包括:
数据库大版本升级。
完整的数据库复制。
利用复制集,选择性地筛选表、行、列。
可从多个上游服务器,用于数据的聚集和合并。

前提条件

说明:
如您需要使用 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 及以上且大版本为11~16的云数据库 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)

安装插件

新建 database,名称为 am,并切换至 am:
postgres=> create database am;
CREATE DATABASE
postgres=> \\c am
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)
发布端订阅端实例都要执行以下命令,创建 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 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.*.*.* 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)

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈