Query failed: ERROR: duplicate key violates unique constraint

Eléphant du PHP | 91 Messages

13 août 2007, 12:03

Voici ma table:

Code : Tout sélectionner

CREATE TABLE referentiel_spatial ( ref_spa_id serial NOT NULL, ref_spa_nom varchar(100), CONSTRAINT referentiel_spatial_pkey PRIMARY KEY (ref_spa_id) ) WITHOUT OIDS; ALTER TABLE referentiel_spatial OWNER TO postgres;
Mon champ id:

Code : Tout sélectionner

Column: ref_spa_id -- ALTER TABLE referentiel_spatial DROP COLUMN ref_spa_id; ALTER TABLE referentiel_spatial ADD COLUMN ref_spa_id int4; ALTER TABLE referentiel_spatial ALTER COLUMN ref_spa_id SET STORAGE PLAIN; ALTER TABLE referentiel_spatial ALTER COLUMN ref_spa_id SET NOT NULL; ALTER TABLE referentiel_spatial ALTER COLUMN ref_spa_id SET DEFAULT nextval('referentiel_spatial_ref_spa_id_seq'::regclass);
C'est cool, j'ai plein de réponses!!! mais vous m'avez un peu embrouillé.
Mon id s'auto-increment étant donné qu'il est serial.

ViPHP
ViPHP | 5924 Messages

13 août 2007, 12:06

Si tu fais ca :

Code : Tout sélectionner

ALTER TABLE referentiel_spatial DROP COLUMN ref_spa_id; ALTER TABLE referentiel_spatial ADD COLUMN ref_spa_id int4;
Alors, c'est un int et non un serial.

Eléphant du PHP | 91 Messages

13 août 2007, 12:07

si c'est un serial:
ref_spa_id serial NOT NULL,

ViPHP
ViPHP | 5924 Messages

13 août 2007, 12:09

Oui mais tu les as fais les requètes ALTER juste après avoir créé ta table ?

Eléphant du PHP | 91 Messages

13 août 2007, 12:12

En fait, j'ai utilisé le logiciel MicroOlap pour générer mes tables dans PostgreSql donc je ne peux pas répondre à ta question.

Ce que je trouve bizarre, c'est que j'ai déjà utilisé le même code pour insérer un nouveau libellé dans une autre table et ça marchait très bien. de plus, les 2 tables sont construites de la même façon.

Il semblerait qu'il s'agisse d'un pb d'incrémentation. Je souhait insérer une nouvelle ligne dans une table qui contient déjà 23 éléments donc si l'insertion fonctionnait, j'aurai ma nouvelle ligne avec un identifiant à 24. Or, l'insertion ne se fait pas car je duplique un identifiant déjà existant. Comment puis-je faire mon insertion avec un identifiant qui n'existe pas encore. Je pense que c'est un problème à régler dans postgres et non dans mon code.
Quelqu'un a-t-il une petite idée?