Liquibase's instruktion autoIncrement="true"
genererer serial
kolonne til PostgreSQL. Til serial
kolonne PostgreSQL vil oprette en sekvens med et navn som tablename_colname_seq
. Standard kolonneværdier vil blive tildelt fra denne sekvens.
Men når du eksplicit indsæt en værdi i seriel kolonne, det påvirker ikke sekvensgeneratoren, og dens næste værdi ændres ikke. Så det kan generere en duplikatværdi, hvilket er præcis din sag.
For at forhindre dette, efter at du har indsat eksplicitte værdier, skal du ændre den aktuelle værdi af en sekvensgenerator enten med ALTER SEQUENCE
sætning eller med setval()
funktion, f.eks.:
ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;
SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));
Dette burde løse problemet.