Erreur PostgreSQL : No space left on device

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

Le système de fichiers hébergeant la base n'a plus de place. Les écritures commencent à échouer ; si le WAL lui-même ne peut plus être écrit, le serveur fera un PANIC et s'arrêtera. Une règle avant tout : ne supprimez jamais manuellement de fichiers dans le répertoire de données — surtout pas pg_wal. Ce chemin mène d'une panne à une restauration.

Ce que signifie cette erreur

Un disque plein sur un hôte PostgreSQL a une courte liste de suspects habituels, et le plus instructif est la rétention de WAL : pg_wal s'auto-nettoie en fonctionnement normal, donc quand il grossit sans limite, quelque chose dit à PostgreSQL de conserver le WAL. Les deux raisons classiques : un archive_command qui échoue (le WAL ne peut pas être recyclé tant qu'il n'est pas archivé) et un slot de réplication inactif — un réplica mis hors service sans supprimer son slot garde le WAL épinglé pour toujours.

Causes fréquentes

Comment la diagnostiquer

# Où sont passés les Go :
df -h
du -sh /var/lib/postgresql/*/main/*   # base/ pg_wal/ log/ ...
-- Slots qui retiennent du WAL (regardez active=f et combien ils retiennent) :
SELECT slot_name, active,
       pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_replication_slots;

-- Requêtes qui écrivent trop de fichiers temporaires (activez log_temp_files pour l'historique) :
SELECT datname, temp_files, pg_size_pretty(temp_bytes) FROM pg_stat_database;

Comment la corriger

🔍 À lire aussi : VACUUM & bloat — le bloat gonfle les tables et index bien au-delà de la taille de leurs données vivantes.