Vous n'êtes pas identifié(e).
Bonjour,
J'essaye d'exécuter une requête pour insérer un enreg dans une table de 4 colonnes, dont la première colonne est un id serial auto_increment.
Dont je ne la spécifie pas dans l'insert into :
state.executeUpdate("INSERT INTO poules (poul_tnmt_id, poul_nom, poul_nbteams) VALUES ('"+idtournoi+"', '"+libellepoule+"', '8')");
ma table :
-- Table: poules
-- DROP TABLE poules;
CREATE TABLE poules
(
poul_id serial NOT NULL,
poul_tnmt_id integer,
poul_nom character varying(64) NOT NULL,
poul_nbteams integer,
CONSTRAINT poules_pkey PRIMARY KEY (poul_id)
)
WITH (
OIDS=FALSE
);
le souci est la réponse de l'insert :
ERREUR: la valeur d'une clé dupliquée rompt la contrainte unique « poules_pkey »
savez-vous pourquoi ?
J'ai fait un vaccuum mais ça n'a rien changé, et d'ailleurs je n'ai actuellement que 9 enregs et je n'ai fait aucun delete ou update précédemment.
J'ai également une autre table à côté, avec quasiment la même requête insert into, et elle marche très bien, elle. J'ai comparé les deux tables => aucune différence de paramétrage....
J'ai bien fait une recherche et notamment je suis tombé sur ce post là :
http://forums.postgresql.fr/viewtopic.php?id=637
Mais bon, question performance et simplicité, je me vois mal aller chercher le max d'une table, je vois pas à quoi sert l'auto-increment dans ce cas, et en plus ça marche normalement bien....
Merci de votre aide si vous avez la soluce...
edit ****
/bug forum dsl, y'a un doublon et si je veux supprimer le deuxième message il va tout me supprimer.....
Dernière modification par IchabOd (20/08/2010 12:29:07)
Hors ligne
je me réponds à moi-même :
En fait j'ai vidé les 9 enregs que j'avais créé à la main dans la base, et j'ai ré-essayé et ça marche maintenant. Ce qui veut dire que l'auto_increment n'est actif/possible/compris que si la requête est passée en sql ????
si vous avez une idée du pourquoi du comment, ça m'intéresse...
Hors ligne
Lorsque vous créez une colonne de type serial, cela crée en fait une colonne de type integer qui a comme valeur par défaut la prochaine valeur d'une séquence, qui est créée implicitement. La valeur qui va être utilisée dépend de cette séquence. Il faudrait donc connaître la valeur de cette séquence et les valeurs de la table pour vous répondre.
Guillaume.
Hors ligne