2016-08-09 10 views
8

मैं विहित उदाहरण मिल की गिनती वापस जाने के लिए:Postgres 9.5+: Upsert अद्यतन और डाला पंक्तियों

INSERT INTO user_logins (username, logins) 
VALUES ('Naomi',1),('James',1) 
ON CONFLICT (username) 
DO UPDATE SET logins = user_logins.logins + EXCLUDED.logins; 

लेकिन अब मुझे यह भी पता करने की जरूरत है:

  1. कितने पंक्तियों
  2. डाला गया
  3. कितने पंक्तियों अपडेट किए गए थे क्योंकि मौजूदा
  4. कितने पंक्तियों क्योंकि बाधाओं के सम्मिलित नहीं किया जा सकता है
  5. हैं टी आखिरी पंक्ति के लिए उन्हें बाधा का सम्मान नहीं किया जाता है, क्या डीबी में पिछली डाली गई/अपडेट की गई पंक्तियां जारी रहेंगी?

उत्तर

4

मुझे नहीं पता कि आप कैसे और समझ सकते हैं कि घटना क्या हुई। आपको xmax के मान को देखना चाहिए, यदि xmax = 0 का अर्थ है कि पंक्ति डाली गई थी, तो अन्य मान xmax वहां पंक्ति अद्यतन थी।

मेरे पास खराब अंग्रेजी है और मैं उदाहरण दिखाने की कोशिश करूंगा।

create table test3(r1 text unique, r2 text); 
\d+ test3 
         Table "public.test3" 
Column | Type | Modifiers | Storage | Stats target | Description 
--------+------+-----------+----------+--------------+------------- 
r1  | text |   | extended |    | 
r2  | text |   | extended |    | 
Indexes: 
    "test3_r1_key" UNIQUE CONSTRAINT, btree (r1) 

सम्मिलित

INSERT INTO test3 
VALUES('www7','rrr'), ('www8','rrr2') 
ON CONFLICT (r1) DO UPDATE SET r2 = 'QQQQ' RETURNING xmax; 
xmax 
------ 
    0 
    0 

यदि कोई डुप्लीकेट सम्मिलित करने का प्रयास करें:

INSERT INTO test3 
VALUES('www7','rrr'), ('www8','rrr2') 
ON CONFLICT (r1) DO UPDATE SET r2 = 'QQQQ' RETURNING xmax; 
    xmax  
----------- 
430343538 
430343538 
(2 rows) 

INSERT 0 2 

परिणाम इस तरह से संसाधित किया जा सकता:
सम्मिलित करना 1 नया और 1 डुप्लीकेट पंक्तियों

WITH t AS (
    INSERT INTO test3 
    VALUES('www9','rrr'), ('www7','rrr2') 
    ON CONFLICT (r1) DO UPDATE SET r2 = 'QQQQ' RETURNING xmax 
) 
SELECT COUNT(*) AS all_rows, 
     SUM(CASE WHEN xmax = 0 THEN 1 ELSE 0 END) AS ins, 
     SUM(CASE WHEN xmax::text::int > 0 THEN 1 ELSE 0 END) AS upd 
FROM t; 

all_rows | ins | upd 
----------+-----+----- 
     2 | 1 | 1 

5.4. System Columns और MVCC

बहुत दिलचस्प देखते हैं कि कैसे अधिक शान से समस्या का समाधान कर सकते हैं

संबंधित मुद्दे