PostgreSQL 逻辑复制配置流程(标准版)
逻辑复制的核心角色只有两个:
发布端(Publisher / 源库)
订阅端(Subscriber / 目标库)
一、前置条件(必写)
1️⃣ 版本要求
2️⃣ 源表要求
- 被复制的表:
- 必须有主键
- 或设置
REPLICA IDENTITY FULL
1
| ALTER TABLE test SET REPLICA IDENTITY FULL;
|
二、发布端(Publisher)配置步骤
Step 1:修改 postgresql.conf
1 2 3
| wal_level = logical max_replication_slots = 10 max_wal_senders = 10
|
修改后 必须重启数据库
Step 2:创建逻辑复制用户
1 2 3 4
| CREATE ROLE repuser LOGIN REPLICATION PASSWORD 'repuser';
|
Step 3:授权复制用户访问权限
1 2 3
| GRANT CONNECT ON DATABASE testdb TO repuser; GRANT USAGE ON SCHEMA public TO repuser; GRANT SELECT ON TABLE test TO repuser;
|
Step 4:创建发布(Publication)
方式一:发布指定表(最常见)
1 2
| CREATE PUBLICATION pub_test FOR TABLE test;
|
方式二:发布所有表(可写)
1 2
| CREATE PUBLICATION pub_all FOR ALL TABLES;
|
Step 5:检查发布是否成功
1
| SELECT * FROM pg_publication;
|
三、订阅端(Subscriber)配置步骤
Step 6:创建目标表(结构必须一致)
1 2 3 4
| CREATE TABLE test ( id INT PRIMARY KEY, info TEXT );
|
✔ 表名、字段名、字段类型必须一致
✔ 字段顺序可以不同
Step 7:创建订阅(Subscription)
1 2 3
| CREATE SUBSCRIPTION sub_test CONNECTION 'host=192.168.1.10 port=5432 dbname=testdb user=repuser password=repuser' PUBLICATION pub_test;
|
这里的 host 是 发布端 IP
Step 8:检查订阅状态
1
| SELECT * FROM pg_subscription;
|
四、验证复制效果(必写)
在发布端插入数据
1
| INSERT INTO test VALUES (1, 'hello logical replication');
|
在订阅端查看数据
👉 能查到数据,说明 逻辑复制生效
五、逻辑复制支持与限制(总结)
✅ 支持
❌ 不支持
TRUNCATE
- DDL(
ALTER TABLE、DROP TABLE 等)
表结构变更后:
1
| ALTER SUBSCRIPTION sub_test REFRESH PUBLICATION;
|
六、“一句话流程总结”(强烈建议背)
wal_level=logical → 创建复制用户 → 创建 publication → 订阅端建表 → 创建 subscription
七、重点(写在论述题里很稳)
- 一个数据库可以有:
- 多个 publication
- 多个 subscription
- 逻辑复制是:
- 表级复制
- 异构架构友好
- 不依赖物理 WAL 文件位置