Django के autocommit और डिफ़ॉल्ट PostgreSQL प्रतिबद्ध मोड के बीच एक असंगतता है।
बॉक्स के बाहर, Django डिफ़ॉल्ट PostgreSQL मोड "पढ़ा गया" का उपयोग करता है जो सभी परिचालनों को एक ही लेनदेन में जोड़ता है जो तब समाप्त होता है जब डीबी कर्सर गुंजाइश से बाहर हो जाता है। समस्या उत्पन्न होती है जब ऑपरेशन की उस श्रृंखला के दौरान कोई त्रुटि होती है। पोस्टग्रेस आपको जारी रखने से पहले रोलबैक जारी करने की अपेक्षा करता है, और यदि आप नहीं करते हैं, तो अगली बार कनेक्शन का उपयोग करने के लिए psycopg2 एक आंतरिक त्रुटि फेंकता है। यदि आप Django autocommit (डिफ़ॉल्ट) पर भरोसा कर रहे हैं, तो आप शायद रोलबैक ठीक से नहीं जा रहे हैं।
सौभाग्य से, psycopg2 को "ऑटोोकॉमिट" नामक ऑपरेशन के दूसरे मोड के लिए समर्थन है जिसमें यह इन लेन-देन को सेट नहीं करता है। MySQL (या दोनों का समर्थन करने की कोशिश कर रहे) से आने वाले लोगों के लिए, यह दुनिया को कुछ स्वच्छता लाता है। 1.1 में उन्होंने इसे बेनकाब करने के लिए समर्थन जोड़ा। अपनी सेटिंग्स के निम्नलिखित जोड़े
DATABASE_OPTIONS = {
"autocommit": True,
}
Django टिकट #3460 के लिए चर्चा बाहर देता है किरकिरा विवरण (यदि आप ट्रंक पर हैं 1.2 syntax के लिए बदलने की आवश्यकता)।
इस पूछने के लिए धन्यवाद - मैं PostgreSQL में जाने पर विचार किया गया था और इनमें से किसी भी भर में भी आ सकते थे लेकिन नहीं जाना जाता है कि वे क्या कर रहे थे। –