首页/数据/数据工程与 ETL 速查/PostgreSQL 逻辑复制与复制槽
CDC 与同步53 条

PostgreSQL 逻辑复制与复制槽

PostgreSQL 变更捕获基于 WAL 逻辑解码:wal_level=logical 后可用发布/订阅(CREATE PUBLICATION / CREATE SUBSCRIPTION)或逻辑解码插件(pgoutput、wal2json)输出变更;复制槽记录消费位点,槽长时间不消费会导致 WAL 持续堆积占用磁盘。

发布订阅与复制槽

发布订阅与复制槽
-- 源端(需 wal_level=logical,修改后重启)
SHOW wal_level;
CREATE PUBLICATION pub_orders FOR TABLE app.orders;

-- 目标端订阅
CREATE SUBSCRIPTION sub_orders
  CONNECTION 'host=10.0.0.5 dbname=app user=repl password=***'
  PUBLICATION pub_orders;

-- 源端查看复制槽状态与保留位点
SELECT slot_name, active, restart_lsn FROM pg_replication_slots;
wal_levellogical 才能逻辑解码
复制槽保存消费进度;未消费则 WAL 不回收
pgoutput内置逻辑解码插件,Debezium 连接器常用
REPLICA IDENTITY决定 update/delete 事件能带出多少旧值
建槽后没人消费 = WAL 堆积直至写满磁盘;删除槽前先确认没有订阅仍在使用。

易错点

  • 开槽未消费导致 WAL 堆积写满磁盘,排查先看 pg_replication_slots
  • REPLICA IDENTITY 保持默认,UPDATE/DELETE 事件缺少旧值字段

数据来源与参考

  • PostgreSQL 官方文档(Logical Replication)
  • Debezium 官方文档(PostgreSQL Connector)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌