PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa :problème d'incrémentation automatique de l'identifiant

Instruction de Liquibase autoIncrement="true" génère serial colonne pour PostgreSQL. Pour serial colonne PostgreSQL créera une séquence avec un nom comme tablename_colname_seq . Les valeurs de colonne par défaut seront attribuées à partir de cette séquence.

Mais quand vous explicitement insérez une valeur dans la colonne série, cela n'affecte pas le générateur de séquence et sa valeur suivante ne changera pas. Il peut donc générer une valeur en double, ce qui est exactement votre cas.

Pour éviter cela après avoir inséré des valeurs explicites, vous devez modifier la valeur actuelle d'un générateur de séquence soit avec ALTER SEQUENCE instruction ou avec setval() fonction, par exemple :

ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;

SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));

Cela devrait résoudre le problème.