Hướng dẫn của Liquibase autoIncrement="true"
tạo serial
cột cho PostgreSQL. Đối với serial
cột PostgreSQL sẽ tạo một chuỗi có tên như tablename_colname_seq
. Giá trị cột mặc định sẽ được chỉ định từ trình tự này.
Nhưng khi bạn rõ ràng chèn một giá trị vào cột nối tiếp, nó không ảnh hưởng đến trình tạo chuỗi và giá trị tiếp theo của nó sẽ không thay đổi. Vì vậy, nó có thể tạo ra một giá trị trùng lặp, đó chính xác là trường hợp của bạn.
Để tránh điều này sau khi bạn chèn các giá trị rõ ràng, bạn cần thay đổi giá trị hiện tại của trình tạo trình tự bằng ALTER SEQUENCE
câu lệnh hoặc với setval()
chức năng, ví dụ:
ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;
SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));
Điều này sẽ khắc phục sự cố.