अप्सर्ट
Linoff द्वारा उत्तर
सही है लेकिन पोस्टग्रेज 9.5 नई "UPSERT" सुविधा
द्वारा थोड़ा सरल किया जा सकता है (a.k.a. MERGE
) वह नई सुविधा Postgres में <के रूप में लागू की गई है कोड>संघर्ष पर डालें
वाक्य रचना।
अद्वितीय अनुक्रमणिका के उल्लंघन की स्पष्ट रूप से जाँच करने के बजाय, हम CONFLICT
. को अनुमति दे सकते हैं खंड उल्लंघन का पता लगाता है। फिर हम कुछ नहीं करते
, जिसका अर्थ है कि हम INSERT
. के प्रयास को छोड़ देते हैं अद्यतन
का प्रयास किए बिना परेशान किए बिना . इसलिए यदि हम सम्मिलित नहीं कर सकते हैं, तो हम अगली पंक्ति में चले जाते हैं।
हमें लिनॉफ़ के कोड के समान परिणाम मिलते हैं लेकिन WHERE
. खो देते हैं खंड।
INSERT INTO bigtable(col1, … )
SELECT col1, …
FROM stagingtable st
ON CONFLICT idx_bigtable_col1_col2_col
DO NOTHING
;