Инструкция на Liquibase autoIncrement="true"
генерира serial
колона за PostgreSQL. За serial
колона PostgreSQL ще създаде последователност с име като tablename_colname_seq
. Стойностите на колоните по подразбиране ще бъдат присвоени от тази последователност.
Но когато изрично вмъкнете стойност в серийна колона, това не засяга генератора на последователности и следващата му стойност няма да се промени. Така че може да генерира дублирана стойност, което е точно вашият случай.
За да предотвратите това, след като сте вмъкнали изрични стойности, трябва да промените текущата стойност на генератор на последователност или с ALTER SEQUENCE
оператор или с setval()
функция, напр.:
ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;
SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));
Това трябва да реши проблема.