pushLog
फ़ंक्शन प्रत्येक इंसर्ट को अलग से करता है, और कमिट धीमा है।
जैसा कि दस्तावेज़ीकरण के एक डेटाबेस को पॉप्युलेट करना में बताया गया है :
इसके अलावा:
हालांकि, आपके मामले में, यह लाभ के बजाय एक समस्या होगी, क्योंकि प्रत्येक INSERT प्राथमिक कुंजी उल्लंघन पर विफल हो सकता है, इस प्रकार अंतिम प्रतिबद्धता के बाद से पिछले INSERT को रद्द कर सकता है। ध्यान दें कि यह COPY
के साथ भी एक समस्या होगी। कोड> , क्या आपको इसका इस्तेमाल करना चाहिए।
चूंकि प्रदर्शन के लिए लेन-देन में प्रश्नों को समूहबद्ध करना वास्तव में आवश्यक है, इसलिए आपको प्राथमिक कुंजी उल्लंघनों से इस तरह निपटने की आवश्यकता है जो लेन-देन को रद्द न करे।
आमतौर पर दो विधियों का उपयोग किया जाता है:
-
त्रुटि से बचें:
INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)
-
एक plpgsql फ़ंक्शन के अंदर सम्मिलित करके त्रुटि को ट्रैप करें जिसमें एक अपवाद ब्लॉक है जो itr को अनदेखा कर रहा है। डुप्लीकेट उत्पन्न करने वाले विशिष्ट INSERT को रद्द कर दिया जाएगा लेकिन लेन-देन निरस्त नहीं किया जाएगा।
यदि आपके पास समवर्ती सम्मिलन हैं तो इन विधियों को लॉकिंग रणनीति के साथ परिष्कृत करने की आवश्यकता है।