Instruksi Liquibase autoIncrement="true"
menghasilkan serial
kolom untuk PostgreSQL. Untuk serial
kolom PostgreSQL akan membuat urutan dengan nama seperti tablename_colname_seq
. Nilai kolom default akan ditetapkan dari urutan ini.
Tetapi ketika Anda secara eksplisit masukkan nilai ke kolom serial, itu tidak mempengaruhi generator urutan, dan nilai berikutnya tidak akan berubah. Sehingga dapat menghasilkan nilai duplikat, yang persis seperti kasus Anda.
Untuk mencegah hal ini setelah Anda memasukkan nilai eksplisit, Anda perlu mengubah nilai saat ini dari generator urutan baik dengan ALTER SEQUENCE
pernyataan atau dengan setval()
fungsi, misalnya:
ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;
SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));
Ini akan memperbaiki masalah.