Erreur 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).

L'écriture aurait laissé une colonne NOT NULL vide, donc PostgreSQL l'a rejetée. La ligne DETAIL montre toute la ligne en échec, avec les valeurs dans l'ordre des colonnes de la table — alignez-la sur la sortie de \d et vous voyez exactement ce qui est arrivé.

Ce que signifie cette erreur

Un mécanisme ici surprend presque tout le monde à un moment donné : les valeurs par défaut des colonnes ne s'appliquent que lorsque la colonne est omise de l'INSERT (ou explicitement dotée du mot-clé DEFAULT). Un INSERT qui liste la colonne et passe NULL signifie NULL — la valeur par défaut ne s'active pas. Les ORM qui sérialisent chaque champ mappé, envoyant null pour ceux non renseignés, désactivent silencieusement vos valeurs par défaut de base de cette manière.

Causes fréquentes

Comment la diagnostiquer

\d users   -- quelles colonnes sont NOT NULL, lesquelles ont un DEFAULT

Mappez la ligne DETAIL sur la liste des colonnes pour identifier le champ fautif, puis trouvez qui a produit le NULL : la charge utile de l'application, la sérialisation de l'ORM, ou le fichier d'entrée. Journaliser le SQL réel que l'application envoie tranche vite les conversations « mais on a défini une valeur par défaut ! ».

Comment la corriger

🔍 Rappel : cette erreur annule la transaction — voir current transaction is aborted si vous attrapez et continuez.