云托管Citus到RDS Aurora Postgres逻辑复制无数据如何排查?
云托管Citus到RDS Aurora PostgreSQL逻辑复制无数据问题排查
核心问题优先级处理顺序
先解决订阅端看不到订阅的问题,该问题为数据不同步的根因,再验证发布端配置、权限配置是否符合要求。
1. 订阅端订阅创建成功但不可见的排查
- 权限校验:执行
CREATE SUBSCRIPTION的用户必须持有Aurora实例的rds_superuser角色,普通用户即使执行命令返回成功,实际订阅不会生效,且普通用户查询pg_subscription系统视图默认无权限,会返回空结果。需用高权限用户执行SELECT * FROM pg_subscription;验证订阅是否真实存在。 - 网络连通性校验:云托管Citus实例的安全组、网络ACL需放通Aurora实例的出站流量,端口默认5432,若网络不通,订阅后台初始化会静默失败,不会出现在订阅列表中。
- 复制参数校验:Aurora端需确认
max_logical_replication_workers、max_sync_workers_per_subscription参数值大于0,参数值不足会导致订阅创建后自动失效。
2. Citus发布端Publication配置校验
- 发布表要求:发布的表必须配置
REPLICA IDENTITY,有主键的表默认满足要求,无主键表需手动执行ALTER TABLE LogicalReplicationTest REPLICA IDENTITY FULL;。 - 分布式表适配:云托管Citus的默认Publication仅会添加当前协调节点的本地表,分布式表的分片不会自动加入发布,需手动指定所有分片,或临时使用
CREATE PUBLICATION testpub FOR ALL TABLES;验证发布配置是否生效。 - 权限要求:创建Publication的用户对发布的表必须持有
SELECT权限,否则发布不会捕获该表的变更日志。 - 发布端参数校验:Citus实例的
wal_level必须设置为logical,max_replication_slots、max_wal_senders参数值需大于当前已使用的数量,否则复制槽无法正常创建。
3. 同步表锁图标含义说明
列名旁的锁图标是数据库客户端工具(如pgAdmin)的可视化标识,除标识只读属性外,还代表该表关联了逻辑复制订阅,表上长期持有AccessShareLock锁,禁止执行DDL操作,避免逻辑复制进程因表结构变更中断。
4. 最终同步有效性校验
- 发布端执行
SELECT * FROM pg_replication_slots;,确认订阅对应的复制槽active状态为t。 - 订阅端执行
SELECT * FROM pg_stat_subscription;,查看last_msg_receipt_time是否有更新,无报错信息。 - 发布端插入一条测试数据,执行
SELECT pg_current_wal_lsn();记录当前LSN,订阅端执行SELECT pg_last_wal_replay_lsn();对比LSN进度,确认复制进程正常消费数据。
内容的提问来源于stack exchange,提问作者Ashish Karpe
相关产品推荐
相关产品推荐

