Error de PostgreSQL: No space left on device

ERROR:  could not extend file "base/16384/51829": No space left on device
HINT:  Check free disk space.

El sistema de archivos que aloja la base de datos no tiene espacio. Las escrituras empiezan a fallar; si el propio WAL no puede escribirse, el servidor hará PANIC y se apagará. Una regla antes que nada: nunca borres manualmente archivos dentro del directorio de datos — especialmente pg_wal. Ese camino lleva de una caída a una restauración.

Qué significa este error

El disco lleno en un host de PostgreSQL tiene una lista corta de sospechosos habituales, y el más instructivo es la retención de WAL: pg_wal se limpia solo en operación normal, así que cuando crece sin límite, algo le está diciendo a PostgreSQL que conserve el WAL. Las dos razones clásicas: un archive_command que falla (el WAL no puede reciclarse hasta que se archive) y un slot de replicación inactivo — una réplica que fue dada de baja sin eliminar su slot mantiene el WAL fijado para siempre.

Causas comunes

Cómo diagnosticarlo

# Dónde han ido a parar los GB:
df -h
du -sh /var/lib/postgresql/*/main/*   # base/ pg_wal/ log/ ...
-- Slots que retienen WAL (mira active=f y cuánto retienen):
SELECT slot_name, active,
       pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_replication_slots;

-- Consultas que escriben demasiados archivos temporales (habilita log_temp_files para el historial):
SELECT datname, temp_files, pg_size_pretty(temp_bytes) FROM pg_stat_database;

Cómo solucionarlo

🔍 Lectura relacionada: VACUUM & bloat — el bloat infla las tablas e índices mucho más allá del tamaño de sus datos vivos.