आपके प्रश्न का तत्काल उत्तर एक अपरर्ट करने के लिए संग्रहीत कार्यविधि का उपयोग करना है।
http://www.postgresql .org/docs/current/static/plpgsql-control-structs.html#PLPGSQL-UPSERT-EXAMPLE
कुछ इस तरह पीजी मॉड्यूल के साथ ठीक काम करता है।
client.query({
text: "SELECT upsert($1, $2, $3, $4, $5, $6)"
values: [ obj.id,
obj.first_name,
obj.last_name,
1,
ip,
date_now.getFullYear() + "-" + month + "-" + date_now.getDate() + " " + date_now.getHours() + ":" + date_now.getMinutes() + ":" + date_now.getSeconds()
]
}, function(u_err, u_result){
if(err) // this is a real error, handle it
// otherwise your data is updated or inserted properly
});
बेशक यह मानता है कि आप किसी प्रकार की मॉडल ऑब्जेक्ट का उपयोग कर रहे हैं जिसमें आपके लिए आवश्यक सभी मूल्य हैं, भले ही वे बदल नहीं रहे हों। आपको उन सभी को अपर में पास करना होगा। यदि आप इसे यहां दिखाए गए तरीके से कर रहे हैं, तो आपको यह निर्धारित करने के लिए अद्यतन के बाद वास्तविक त्रुटि ऑब्जेक्ट की जांच करनी चाहिए कि क्या यह विफल हो गया है क्योंकि पंक्ति पहले से ही है, या किसी अन्य कारण से (जो वास्तविक डीबी त्रुटि है कि संभालने की जरूरत है)।
फिर आपको अपने अपडेट के विफल होने और आपके इंसर्ट के समय के बीच संभावित दौड़ की स्थिति से निपटना होगा। यदि कोई अन्य फ़ंक्शन उसी आईडी से सम्मिलित करने का प्रयास करता है, तो आपको एक समस्या है। लेन-देन उसके लिए अच्छा है। मुझे अभी इतना ही मिला है। आशा है कि यह मदद करता है।