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

डेटा को बल्क में स्टोर करने के लिए libpqxx का उपयोग करना या libpqxx में COPY स्टेटमेंट का उपयोग कैसे करना है?

pushLog फ़ंक्शन प्रत्येक इंसर्ट को अलग से करता है, और कमिट धीमा है।

जैसा कि दस्तावेज़ीकरण के एक डेटाबेस को पॉप्युलेट करना में बताया गया है :

इसके अलावा:

हालांकि, आपके मामले में, यह लाभ के बजाय एक समस्या होगी, क्योंकि प्रत्येक INSERT प्राथमिक कुंजी उल्लंघन पर विफल हो सकता है, इस प्रकार अंतिम प्रतिबद्धता के बाद से पिछले INSERT को रद्द कर सकता है। ध्यान दें कि यह COPY के साथ भी एक समस्या होगी। कोड> , क्या आपको इसका इस्तेमाल करना चाहिए।

चूंकि प्रदर्शन के लिए लेन-देन में प्रश्नों को समूहबद्ध करना वास्तव में आवश्यक है, इसलिए आपको प्राथमिक कुंजी उल्लंघनों से इस तरह निपटने की आवश्यकता है जो लेन-देन को रद्द न करे।

आमतौर पर दो विधियों का उपयोग किया जाता है:

  1. त्रुटि से बचें:INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)

  2. एक plpgsql फ़ंक्शन के अंदर सम्मिलित करके त्रुटि को ट्रैप करें जिसमें एक अपवाद ब्लॉक है जो itr को अनदेखा कर रहा है। डुप्लीकेट उत्पन्न करने वाले विशिष्ट INSERT को रद्द कर दिया जाएगा लेकिन लेन-देन निरस्त नहीं किया जाएगा।

यदि आपके पास समवर्ती सम्मिलन हैं तो इन विधियों को लॉकिंग रणनीति के साथ परिष्कृत करने की आवश्यकता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL:SQL क्वेरी में प्रत्येक परिणाम के लिए रिकॉर्ड कैसे सम्मिलित करें?

  2. MySQL के FOR UPDATE लॉकिंग का उपयोग करते समय, वास्तव में क्या लॉक है?

  3. आप mysql में किसी अन्य तालिका से एकाधिक फ़ील्ड कैसे अपडेट करते हैं?

  4. एक कॉलम में सबसे लंबे समय तक चलने के लिए mysql क्वेरी

  5. त्रुटि sql:एक varchar डेटा प्रकार का डेटाटाइम डेटा प्रकार में रूपांतरण के परिणामस्वरूप एक आउट-ऑफ-रेंज मान होता है