Monitorar o WAL retido por replication slots e remover com segurança um slot abandonado
PostgreSQLReplicaçãoComando
SELECT slot_name, slot_type, database, active, active_pid, wal_status,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal,
pg_size_pretty(safe_wal_size) AS safe_wal_size,
xmin, catalog_xmin
FROM pg_replication_slots
ORDER BY pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) DESC NULLS LAST;
-- Safe drop: drops only if not active (returns 0 rows if active)
SELECT pg_drop_replication_slot(slot_name) FROM pg_replication_slots WHERE slot_name = '<slot>' AND NOT active;O que faz
Mostra quanto WAL cada slot retém no primário, o wal_status (reserved/extended/unreserved/lost), a margem segura restante sob max_slot_wal_keep_size (safe_wal_size) e os valores xmin/catalog_xmin que seguram o VACUUM; a segunda consulta remove o slot apenas se ele não estiver em uso.
Quando usar
Quando o diretório pg_wal cresce, em um alerta de disco e no monitoramento de rotina; para limpeza de slots após um standby ou subscriber ter sido removido definitivamente.
Atenção
Um slot inativo retém WAL sem limite e pode encher o disco e parar o primário; um slot que segura xmin/catalog_xmin também bloqueia a limpeza de dead tuples e cria risco de bloat/wraparound. Remover um slot impede que seu standby/subscriber continue de onde parou (é preciso reconstruir); verifique o dono antes de remover. Execute no primário (pg_current_wal_lsn() falha em um standby).