J'ai la table suivante dans postgres:
CREATE TABLE "test" (
"id" serial NOT NULL PRIMARY KEY,
"value" text
)
Je fais les insertions suivantes:
insert into test (id, value) values (1, 'alpha')
insert into test (id, value) values (2, 'beta')
insert into test (value) values ('gamma')
Dans les 2 premières insertions, je mentionne explicitement l'id. Cependant, le pointeur d'auto-incrémentation de la table n'est pas mis à jour dans ce cas. Par conséquent, dans la 3ème insertion, je reçois l'erreur:
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
Je n'ai jamais rencontré ce problème avec MySQL dans les moteurs MyISAM et INNODB. Explicite ou non, MySQL met toujours à jour le pointeur auto-incrémenté en fonction de l'id de ligne maximum.
Quelle est la solution de contournement pour ce problème dans postgres? J'en ai besoin car je veux un contrôle plus strict pour certains ids dans ma table.
MISE À JOUR: J'en ai besoin car pour certaines valeurs, j'ai besoin d'avoir un id fixe. Pour les nouvelles entrées, je ne me dérange pas d'en créer de nouvelles.
Je pense qu'il peut être possible d'augmenter manuellement le pointeur nextval
à max(id) + 1
chaque fois que j'insère explicitement les ids. Mais je ne suis pas sûr de comment faire cela.