此问题通常是因为 PostgreSQL 中未使用的复制槽(Replication Slot)仍然保留着 WAL 文件。只要复制槽存在,PostgreSQL 就不会回收该槽所需的 WAL,因此磁盘空间会持续增长。请先检查当前复制槽状态:
SQL
SELECT slot_name, active, restart_lsn
FROM pg_replication_slots;
如果确认对应的备库、订阅或 CDC 工具已不再使用,并且 active = false,可以安全删除复制槽:
SQL
SELECT pg_drop_replication_slot('slot_name');
PostgreSQL 仅允许删除非活动(inactive)的复制槽。
如果复制槽仍显示为活动状态,请先查找并终止对应的复制连接,然后再删除:
SQL
SELECT * FROM pg_stat_replication;
SELECT pg_terminate_backend(<pid>);
SELECT pg_drop_replication_slot('slot_name');
不建议直接删除 pg_wal 目录中的文件。最佳做法是删除已废弃的复制槽,让 PostgreSQL 自动回收 WAL 文件。
Domic Vo.