लिक्विबेस का निर्देश 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));
इससे समस्या ठीक हो जानी चाहिए।