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

Sqlalchemy और PostgreSql:भविष्य में संघर्ष के बिना प्राथमिक कुंजी को मैन्युअल रूप से कैसे सेट करें?

आप जो चाहते हैं उसे करने के लिए मुझे किसी सुरक्षित, कुशल तरीके की जानकारी नहीं है। आपको वास्तव में यह चुनना चाहिए कि आप कुंजियों को स्वयं परिभाषित करना चाहते हैं या जेनरेट की गई कुंजियों का उपयोग करना चाहते हैं और एक रणनीति या दूसरे से चिपके रहना चाहते हैं।

यदि आपको भयानक संगामिति से कोई आपत्ति नहीं है, तो आप LOCK TABLE thetable , अपना काम करो, setval तालिका के पहचानकर्ता अनुक्रम को आपके द्वारा सम्मिलित किए जाने के बाद अगले निःशुल्क मान पर, और commit ताला मुक्त करने के लिए। हालाँकि, यह अभी भी उन ऐप्स के साथ समस्याएँ पैदा करेगा जो स्पष्ट रूप से nextval . कहते हैं (कई ORM की तरह) डेटाबेस को ?INSERT से हटाकर मान को परिभाषित करने देने के बजाय कॉलम सूची या स्पष्ट रूप से इसे DEFAULT . के रूप में नामित करना ।

अन्यथा आप अपना कोड (या पीएल/पीजीएसक्यूएल हेल्पर फ़ंक्शन) प्राप्त कर सकते हैं, एक रिट्री लूप में सम्मिलित करें जो कुंजी को बढ़ाता है और अखंडता त्रुटि मिलने पर फिर से प्रयास करता है। यह रणनीति काम नहीं करेगी यदि आपको प्रति लेनदेन केवल एक प्रविष्टि से अधिक करने की आवश्यकता है। इसके अलावा SERIALIZABLE . में अलगाव मोड मुझे नहीं लगता कि आप इसे पीएल/पीजीएसक्यूएल के साथ कर सकते हैं, आपको क्रमांकन विफलताओं को संभालने के लिए क्लाइंट-साइड रिट्री लूप का उपयोग करना होगा।

यह एक भयानक विचार है। या तो एप्लिकेशन परिभाषित कुंजियों का लगातार उपयोग करें, या डेटाबेस-परिभाषित कुंजियों का लगातार उपयोग करें। दोनों को मिक्स न करें।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sqlalchemy.exc.OperationalError:(psycopg2.OperationalError)

  2. डेटा पीढ़ी और हार्डवेयर गुणवत्ता

  3. Django 1.8 ArrayField संलग्न करें और बढ़ाएं

  4. PostgreSQL 9.2.1 . में लूपिंग ट्रिगर कॉल से कैसे बचें

  5. मैं केवल लोअरकेस के आधार पर PostgreSQL में एक इंडेक्स कैसे बना सकता हूं?