Tag - postgresql

Entries feed

Sunday, September 17 2017

PG::NotNullViolation error on id column in PostgreSQL

Faced with this error:

PG::NotNullViolation: ERROR:  null value in column "id" violates not-null constraint

it took me some time to realize that my id column was not a serial but a plain integer...

To fix this, just execute:

ALTER TABLE my_table DROP COLUMN id;
ALTER TABLE my_table ADD COLUMN id SERIAL PRIMARY KEY;

Saturday, September 12 2015

Réparer PG::UniqueViolation: ERROR: Duplicate Key Value Violates Unique Constraint 'nom_de_votre_table_pkey'

Postgresql conserve en mémoire la valeur maximale attribuée au champ 'id' et utilise cette valeur pour générer un nouvel 'id' quand un nouvel enregistrement est pris en base. Cependant, si vous avez importé des données (par exemple depuis un fichier csv avec pgadmin3, important ainsi leurs 'id' initiaux), il se peut que la valeur maximale gardée en mémoire ne corresponde plus à la table existante. Lors d'un nouvel enregistrement, si la liste importée était plus longue que la liste initiale, ce message d'erreur risque d'apparaître :

PG::UniqueViolation: ERROR: Duplicate Key Value Violates Unique Constraint 'nom_de_votre_table_pkey'

Pour corriger l'information dans la base Postgresql, il est possible d'exécuter cette commande :

SELECT setval('nom_de_votre_table_id_seq', (SELECT MAX(id) FROM nom_de_votre_table));

SELECT MAX(id) FROM nom_de_votre_table) calcule la valeur maximale d'id existant dans les données de la table. SELECT setval('nom_de_votre_table_id_seq', value) attribue une nouvelle à la chaîne 'nom_de_votre_table_id_seq').