मैं 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
एक अवश्य पढ़ा जाने वाला लेख:डेटा आयात ।