Errore PostgreSQL: 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).

La scrittura avrebbe lasciato vuota una colonna NOT NULL, quindi PostgreSQL l'ha rifiutata. La riga DETAIL mostra l'intera riga fallita, con i valori nell'ordine delle colonne della tabella — allineala con l'output di \d e vedi esattamente cosa è arrivato.

Cosa significa questo errore

Un meccanismo qui sorprende quasi tutti prima o poi: i default delle colonne si applicano solo quando la colonna è omessa dall'INSERT (o le viene dato esplicitamente la keyword DEFAULT). Un INSERT che elenca la colonna e passa NULL significa NULL — il default non entra in gioco. Gli ORM che serializzano ogni campo mappato, inviando null per quelli non impostati, disabilitano silenziosamente i tuoi default del database in questo modo.

Cause comuni

Come diagnosticarlo

\d users   -- quali colonne sono NOT NULL, quali hanno un DEFAULT

Mappa la riga DETAIL sull'elenco delle colonne per identificare il campo colpevole, poi trova chi ha prodotto il NULL: payload applicativo, serializzazione dell'ORM, o il file di input. Loggare l'SQL effettivo che l'app invia risolve in fretta le conversazioni "ma abbiamo impostato un default!".

Come risolverlo

🔍 Ricorda: questo errore interrompe la transazione — vedi current transaction is aborted se stai catturando e proseguendo.