PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

लिक्विबेस + पोस्टग्रेस्क्ल + स्प्रिंग जेपीए:आईडी ऑटो इंक्रीमेंट इश्यू

लिक्विबेस का निर्देश 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));

इससे समस्या ठीक हो जानी चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL फ़ंक्शंस में भाषा sql और भाषा plpgsql के बीच अंतर

  2. FATAL को कैसे हल करें:गैर-सुपरयूज़र के लिए कनेक्शन की सीमा पार हो गई

  3. पोस्टग्रेज के साथ तैयार बयानों का उपयोग कैसे करें

  4. इन-मेमोरी डेटाबेस के साथ यूनिट परीक्षण

  5. रेगुलर एक्सप्रेशन या LIKE पैटर्न के लिए एस्केप फंक्शन