PostgreSQL-Fehler: null value violates not-null constraint

ERROR:  null value in column "email" of relation "users" violates not-null constraint
DETAIL:  Failing row contains (42, null, Alice, 2026-07-09 10:12:00).

Der Schreibvorgang hätte eine NOT-NULL-Spalte leer gelassen, daher hat PostgreSQL ihn abgewiesen. Die DETAIL-Zeile zeigt die gesamte fehlschlagende Zeile mit Werten in der Spaltenreihenfolge der Tabelle — richten Sie sie an der \d-Ausgabe aus und Sie sehen genau, was ankam.

Was dieser Fehler bedeutet

Ein Mechanismus hier überrascht fast jeden irgendwann: Spalten-Defaults greifen nur, wenn die Spalte aus dem INSERT weggelassen wird (oder ihr explizit das Schlüsselwort DEFAULT gegeben wird). Ein INSERT, das die Spalte auflistet und NULL übergibt, bedeutet NULL — der Default springt nicht ein. ORMs, die jedes gemappte Feld serialisieren und null für nicht gesetzte senden, deaktivieren Ihre Datenbank-Defaults auf diese Weise stillschweigend.

Häufige Ursachen

So diagnostizieren Sie ihn

\d users   -- welche Spalten sind NOT NULL, welche haben einen DEFAULT

Ordnen Sie die DETAIL-Zeile der Spaltenliste zu, um das anstößige Feld zu identifizieren, und finden Sie dann, wer das NULL erzeugt hat: Anwendungs-Payload, ORM-Serialisierung oder die Eingabedatei. Das tatsächliche SQL zu protokollieren, das die App sendet, klärt die "aber wir haben doch einen Default gesetzt!"-Gespräche schnell.

So beheben Sie ihn

🔍 Denken Sie daran: dieser Fehler bricht die Transaktion ab — siehe current transaction is aborted, falls Sie fangen und weitermachen.