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

INSERT पंक्ति पर अनुक्रम अपडेट करें

यह एक ज्ञात सीमा है:अगला () फ़ंक्शन, जो आपके क्षेत्र का आपका डिफ़ॉल्ट मान है। जब आप INSERT . पर डेटा की आपूर्ति करते हैं उस फ़ील्ड के लिए, डिफ़ॉल्ट मान का व्यंजक मूल्यांकन नहीं करता है, इसलिए अनुक्रम का मान स्पर्श नहीं किया जाता है।

INSERT . से पहले/बाद में ट्रिगर सेट करना एक वैकल्पिक हल है अनुक्रम के मान को मैन्युअल रूप से ठीक करने के लिए setval() . लेकिन इस तरह आपको चाहिए अद्यतन पर एक ट्रिगर सेट अप करने की आवश्यकता है उस फ़ील्ड पर भी, अनुक्रम के मान को ठीक करने के लिए, जब आप किसी मौजूदा आईडी को किसी उच्च आईडी में अपडेट करते हैं।

एक अन्य समाधान यह है कि आप एक संग्रहीत फ़ंक्शन लिखते हैं, जो उस फ़ील्ड के लिए उपलब्ध मान उत्पन्न कर सकता है और आपके फ़ील्ड का डिफ़ॉल्ट मान उस फ़ंक्शन के रिटर्न मान पर सेट कर सकता है। कुछ, जैसे:

LOOP
    result = nextval('my_id_seq');
    EXIT WHEN NOT EXISTS (SELECT * FROM my_table WHERE my_id = result);
END LOOP;
RETURN result;

लेकिन सावधान रहें:अनुक्रमों के लिए डिफ़ॉल्ट कार्यक्षमता समवर्ती आवेषण के लिए सुरक्षित है (अनुक्रम की वर्तमान स्थिति वैश्विक है - लेनदेन स्वतंत्र)। यदि आप उन क्षेत्रों को स्पष्ट मान प्रदान करते हैं, तो ऐसा नहीं होगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres पंक्ति आकार की समझ बनाना

  2. क्या मुझे टाइमज़ोन को पोस्टग्रेज़ और जेडीबीसी के लिए टाइमस्टैम्प से अलग से स्टोर करना चाहिए?

  3. PostgreSQL HTML संस्थाओं के कार्य को प्रतिस्थापित करता है

  4. PostgreSQL अन्य स्तंभों पर वातानुकूलित मानों के साथ एक नया स्तंभ बनाता है

  5. पिछले DELETE से प्रभावित पंक्तियों की संख्या वाले वेरिएबल? (एक समारोह में)