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

पीजी-वादे के साथ कई रिकॉर्ड सम्मिलित करना

मैं pg-promise का लेखक हूं ।

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

pg-promise के साथ यह निम्नलिखित तरीके से किया जाता है:

db.tx(t => {
    const queries = lst.map(l => {
        return t.none('INSERT INTO table(id, key, value) VALUES(${id}, ${key}, ${value})', l);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of null-s
    })
    .catch(error => {
        // ERROR
    });

आप tx विधि से लेन-देन शुरू करते हैं , फिर सभी INSERT . बनाएं क्वेरी वादे करें, और फिर उन सभी को बैच के रूप में हल करें ।

दूसरा दृष्टिकोण सभी सम्मिलित मानों को एक INSERT . में संयोजित करके है क्वेरी, जिसे मैं Performance Boost में विस्तार से समझाता हूं . यह भी देखें:pg-promise के साथ मल्टी-रो इंसर्ट ए> ।

अधिक उदाहरणों के लिए देखें कार्य और लेन-देन

जोड़

यह ध्यान देने योग्य है कि ज्यादातर मामलों में हम id record रिकॉर्ड नहीं डालते हैं , बल्कि यह स्वचालित रूप से उत्पन्न हुआ है। कभी-कभी हम नई आईडी वापस प्राप्त करना चाहते हैं, और अन्य मामलों में हमें परवाह नहीं है।

ऊपर दिए गए उदाहरण null . की एक सरणी के साथ हल होते हैं -s, क्योंकि बैच व्यक्तिगत परिणामों की एक सरणी के साथ हल करता है, और विधि none null . के साथ हल करता है , इसके एपीआई के अनुसार।

आइए मान लें कि हम नई id-s जेनरेट करना चाहते हैं, और हम उन सभी को वापस पाना चाहते हैं। इसे पूरा करने के लिए हम कोड को निम्नलिखित में बदल देंगे:

db.tx(t => {
    const queries = lst.map(l => {
        return t.one('INSERT INTO table(key, value) VALUES(${key}, ${value}) RETURNING id',
                       l, a => +a.id);
    });
    return t.batch(queries);
})
    .then(data => {
        // SUCCESS
        // data = array of new id-s;
    })
    .catch(error => {
        // ERROR
    });

यानी परिवर्तन हैं:

  • हम id नहीं डालते हैं मान
  • हम विधि को प्रतिस्थापित करते हैं none एक के साथ , प्रत्येक प्रविष्टि से एक पंक्ति/वस्तु प्राप्त करने के लिए
  • हम RETURNING id जोड़ते हैं मूल्य प्राप्त करने के लिए क्वेरी करने के लिए
  • हम जोड़ते हैं a => +a.id स्वचालित पंक्ति परिवर्तन करने के लिए। यह भी देखें pg-promise पूर्णांकों को स्ट्रिंग के रूप में लौटाता है यह समझने के लिए कि + के लिए है।

अद्यतन-1

एकल INSERT . के माध्यम से उच्च-प्रदर्शन दृष्टिकोण के लिए क्वेरी देखें pg-promise के साथ मल्टी-रो इंसर्ट

अद्यतन-2

एक अवश्य पढ़ा जाने वाला लेख:डेटा आयात




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql join_collapse_limit और क्वेरी प्लानिंग का समय

  2. Postgresql में कॉपी करें:सापेक्ष पथ के रूप में व्याख्या किया गया निरपेक्ष पथ

  3. django . में sqlite से postgresql में माइग्रेशन

  4. PostgreSQL:SQL स्क्रिप्ट उन सभी तालिकाओं की सूची प्राप्त करने के लिए जिनमें एक विशेष कॉलम विदेशी कुंजी के रूप में है

  5. मैं अपने सभी डेटा को 5 मीटर की दूरी के भीतर कैसे क्वेरी कर सकता हूं?