PostgreSQL-Fehler: No space left on device

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

Das Dateisystem, das die Datenbank beherbergt, hat keinen Platz mehr. Schreibvorgänge beginnen fehlzuschlagen; wenn das WAL selbst nicht geschrieben werden kann, geht der Server in PANIC und fährt herunter. Eine Regel vor allem anderen: löschen Sie nie manuell Dateien innerhalb des Datenverzeichnisses — besonders pg_wal. Dieser Weg führt von einem Ausfall zu einem Restore.

Was dieser Fehler bedeutet

Volle Platte auf einem PostgreSQL-Host hat eine kurze Liste üblicher Verdächtiger, und der lehrreichste ist WAL-Retention: pg_wal reinigt sich im Normalbetrieb selbst, wenn es also unbegrenzt wächst, sagt etwas PostgreSQL, das WAL zu behalten. Die zwei klassischen Gründe: ein fehlschlagendes archive_command (WAL kann nicht recycelt werden, bis es archiviert ist) und ein inaktiver Replikations-Slot — eine Replika, die außer Betrieb genommen wurde, ohne ihren Slot zu droppen, hält WAL für immer angeheftet.

Häufige Ursachen

So diagnostizieren Sie ihn

# Wohin die GB gegangen sind:
df -h
du -sh /var/lib/postgresql/*/main/*   # base/ pg_wal/ log/ ...
-- Slots, die WAL zurückhalten (achten Sie auf active=f und wie viel sie zurückhalten):
SELECT slot_name, active,
       pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) AS retained_wal
FROM pg_replication_slots;

-- Queries, die zu viele temporäre Dateien schreiben (aktivieren Sie log_temp_files für die Historie):
SELECT datname, temp_files, pg_size_pretty(temp_bytes) FROM pg_stat_database;

So beheben Sie ihn

🔍 Weiterführend: VACUUM & Bloat — Bloat bläht Tabellen und Indizes weit über ihre Live-Datengröße hinaus auf.