Liquibases instruktion autoIncrement="true"
genererar serial
kolumn för PostgreSQL. För serial
kolumn PostgreSQL kommer att skapa en sekvens med ett namn som tablename_colname_seq
. Standardkolumnvärden kommer att tilldelas från denna sekvens.
Men när du uttryckligen infoga ett värde i seriell kolumn, det påverkar inte sekvensgeneratorn och dess nästa värde kommer inte att ändras. Så det kan generera ett duplikatvärde, vilket är exakt ditt fall.
För att förhindra detta efter att du har infogat explicita värden måste du ändra det aktuella värdet för en sekvensgenerator antingen med ALTER SEQUENCE
eller med setval()
funktion, t.ex.:
ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;
SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));
Detta bör lösa problemet.