---

title: PostgreSQL 逻辑复制冲突与恢复演练(冲突检测、比对与回放)

date: 2025-11-26

keywords:

  • 逻辑复制
  • 冲突检测
  • 复制槽
  • 回放
  • 比对校验

description: 在逻辑复制场景下模拟唯一约束冲突与数据漂移,给出检测、比对与恢复流程,包括暂停订阅、对齐数据与回放验证,确保一致性与可追踪。

tags:

  • PostgreSQL
  • 冲突检测
  • 回放
  • 复制槽
  • 数据与存储
  • 数据库
  • 比对校验
  • 逻辑复制

categories:

  • 文章资讯
  • 编程技术

---

概述

逻辑复制依赖主库变更日志在订阅端回放。数据漂移或唯一约束冲突会导致订阅应用失败。通过暂停订阅、比对校验与对齐数据,然后恢复并回放,可保证一致性与可审计。

关键实践与参数

  • 参数: wal_level=logical max_replication_slots max_wal_senders
  • 发布/订阅: 选择性表复制,控制 copy_data
  • 冲突检测: 通过 pg_stat_subscription 与日志识别错误
  • 恢复流程: 暂停 → 对齐数据 → 刷新发布 → 恢复订阅

示例/配置/实现

ALTER SYSTEM SET wal_level = 'logical';
SELECT pg_reload_conf();
CREATE PUBLICATION pub_orders FOR TABLE orders;
CREATE SUBSCRIPTION sub_orders CONNECTION 'host=primary port=5432 dbname=shop user=replicator password=secret' PUBLICATION pub_orders WITH (copy_data = true);

-- 模拟冲突: 在订阅端预先存在主键重复行
INSERT INTO orders(id, amount) VALUES (1001, 12.3);
-- 主库写入同主键但不同数据
INSERT INTO orders(id, amount) VALUES (1001, 15.0);
-- 检测与暂停
SELECT subname, latest_end_time, last_msg_send_time, last_msg_receipt_time FROM pg_stat_subscription;
ALTER SUBSCRIPTION sub_orders DISABLE;

-- 比对与对齐(示例: 以主库为准)
DELETE FROM orders WHERE id = 1001; -- 清理冲突数据
-- 或重新同步目标表数据
ALTER SUBSCRIPTION sub_orders REFRESH PUBLICATION WITH (copy_data = true);

-- 恢复并回放
ALTER SUBSCRIPTION sub_orders ENABLE;

验证

  • 订阅状态: pg_stat_subscription 恢复正常,滞后时间下降
  • 数据一致: 比对主从关键字段哈希或计数一致
  • 回放完成: 新写入在订阅端可见且无冲突
  • 审计记录: 保留暂停、比对与恢复操作日志

注意事项

  • DDL不复制,需保持两端Schema一致
  • 大批量对齐需在维护窗口执行并监控资源
  • 复制用户权限最小化,槽位需回收
  • 故障演练定期执行,完善SOP与回滚策略

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部