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

अप्सर्ट एरर (ऑन कॉनफ्लिक्ट डू अपडेट) डुप्लिकेट विवश मानों की ओर इशारा करते हुए

समस्या इस तथ्य के कारण है कि स्पष्ट रूप से कुछ प्रविष्टियों में कई लेखक हैं। तो आपके द्वारा लिखी गई चुनिंदा क्वेरी में आंतरिक जुड़ाव एक ही प्रविष्टि के लिए कई पंक्तियाँ लौटाएगा और INSERT ... ON CONFLICT यह पसंद नहीं है। चूंकि आप केवल ReferenceAuthor . का उपयोग करते हैं फ़िल्टरिंग के लिए तालिका, आप बस क्वेरी को फिर से लिख सकते हैं ताकि वह उस तालिका का उपयोग केवल उन प्रविष्टियों को फ़िल्टर करने के लिए करे जिनमें कोई लेखक नहीं है exists एक सहसंबद्ध सबक्वेरी पर। यहां बताया गया है:

INSERT INTO new.bookmonographs  (citavi_id, abstract, createdon, edition, title, year)
SELECT "ID", "Abstract", "CreatedOn"::timestamp, "Edition", "Title", "Year"
FROM old."Reference"
WHERE old."Reference"."ReferenceType" = 'Book'
    AND old."Reference"."Year" IS NOT NULL
    AND old."Reference"."Title" IS NOT NULL
    AND exists(SELECT FROM old."ReferenceAuthor" WHERE old."ReferenceAuthor"."ReferenceID" = old."Reference"."ID")
    --Year, Title and Author must be present in the data, otherwise the entry is deemed useless, hence won't be included
ON CONFLICT (citavi_id) DO UPDATE 
    SET (abstract, createdon, edition, title, year) = (excluded.abstract, excluded.createdon, excluded.edition, excluded.title, excluded.year)
; 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जांचें कि पोस्टग्रेस सरणी में मान मौजूद है या नहीं

  2. PostgreSQL में निर्दिष्ट कॉलम द्वारा समूहित करें

  3. PostgreSQL को केवल मेमोरी में चलाना

  4. सरणियों पर कुल कार्य

  5. अनुरोध PG::Connection#async_exec . में अटक जाते हैं