You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Aurora PostgreSQL至RDS PostgreSQL逻辑复制异常及全量快照需求问询

问题分析与解决方案

为什么删除重建槽后仍从旧LSN读取?

出现这种现象通常是以下原因之一:

  • 复制槽未彻底清理:逻辑复制的复制槽存储在发布端(Aurora PostgreSQL),如果删除操作时槽处于active状态(比如订阅未先禁用),删除可能未生效,导致重建时复用旧槽的LSN记录。
  • 订阅端元数据残留:删除订阅后,订阅端的pg_subscription或pg_subscription_rel表中仍有该订阅的关联记录,重新创建时复用了旧的同步状态。
  • 未触发初始快照:创建订阅时若显式指定copy_data = false,或订阅端已存在目标表且未处理,逻辑复制会跳过快照阶段,直接从发布端当前(或旧槽残留的)LSN开始同步。

实现从初始状态开始的快照复制

按以下步骤彻底清理并重建逻辑复制:

1. 彻底清理旧资源

订阅端操作:

-- 禁用订阅
ALTER SUBSCRIPTION your_subscription_name DISABLE;
-- 删除订阅
DROP SUBSCRIPTION your_subscription_name;

发布端(Aurora PostgreSQL)操作:

-- 删除对应复制槽(替换为你的槽名)
SELECT pg_drop_replication_slot('your_replication_slot_name');
-- 删除发布
DROP PUBLICATION your_publication_name;

验证清理结果:

  • 发布端:SELECT * FROM pg_replication_slots WHERE slot_name = 'your_replication_slot_name';(应返回空)
  • 发布端:SELECT * FROM pg_publication WHERE pubname = 'your_publication_name';(应返回空)
  • 订阅端:SELECT * FROM pg_subscription WHERE subname = 'your_subscription_name';(应返回空)

2. 重新创建发布(发布端)

-- 创建包含目标表的发布(替换为你的表名,或用FOR ALL TABLES覆盖所有表)
CREATE PUBLICATION your_publication_name FOR TABLE table1, table2;

3. 准备订阅端表(关键步骤)

如果订阅端已存在目标表,需清空或删除以避免快照冲突:

-- 方案1:清空表数据(保留结构)
TRUNCATE TABLE table1, table2;
-- 方案2:删除表,让订阅自动创建(需确保订阅用户有CREATE权限)
DROP TABLE IF EXISTS table1, table2;

4. 创建订阅并触发初始快照(订阅端)

CREATE SUBSCRIPTION your_subscription_name
CONNECTION 'host=your-aurora-endpoint port=5432 dbname=your_db user=repl_user password=your_password'
PUBLICATION your_publication_name
WITH (
  create_slot = true,  -- 自动在发布端创建全新复制槽
  copy_data = true,    -- 强制触发初始快照复制(默认值,显式指定更稳妥)
  enabled = true
);

5. 验证同步状态

  • 发布端检查复制槽:
    SELECT slot_name, active, restart_lsn FROM pg_replication_slots;
    
    确认active为t(订阅已连接),restart_lsn为当前最新LSN。
  • 订阅端检查订阅:
    SELECT subname, subenabled FROM pg_subscription;
    SELECT * FROM pg_subscription_rel;  -- 查看表同步进度
    
  • 验证数据:检查订阅端表是否已同步发布端的初始数据,后续写入操作是否能实时同步。

额外注意事项

  • 确保复制用户权限:发布端用户需有REPLICATION和表SELECT权限;订阅端用户需有表读写(或创建)权限。
  • Aurora配置检查:确认Aurora PostgreSQL版本≥10,且参数组中rds.logical_replication已设为1(需重启实例生效)。
  • 避免名称复用:若之前用了同名的发布/订阅,建议更换名称,或确保所有残留元数据已清理。

内容的提问来源于stack exchange,提问作者Arpita Sheelavant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:33:16