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

PostreSQL में केवल नई पंक्तियाँ कैसे सम्मिलित करें?

डेटा आयात करें

COPY सब कुछ एक अस्थायी स्टेजिंग टेबल . के लिए और अपनी लक्ष्य तालिका में केवल नए शीर्षक डालें।

CREATE TEMP TABLE tmp(title text);

COPY tmp FROM 'path/to/file.csv';
ANALYZE tmp;

INSERT INTO tbl
SELECT DISTINCT tmp.title
FROM   tmp 
LEFT   JOIN tbl USING (title)
WHERE  tbl.title IS NULL;

आईडी एक serial . के साथ स्वचालित रूप से उत्पन्न होनी चाहिए कॉलम tbl_id tbl . में ।

LEFT JOIN / IS NULL निर्माण पहले से मौजूद शीर्षकों को अयोग्य घोषित करता है। NOT EXISTS एक और संभावना होगी।

DISTINCT अस्थायी तालिका में आने वाले डेटा में डुप्लिकेट को रोकता है tmp

ANALYZE यह सुनिश्चित करने के लिए उपयोगी है कि क्वेरी प्लानर एक समझदार योजना चुनता है, और अस्थायी तालिकाओं का विश्लेषण ऑटोवैक्यूम द्वारा नहीं किया जाता है।

चूंकि आपके पास 3 मिलियन आइटम हैं, यह temp_buffer . के लिए सेटिंग बढ़ाने के लिए भुगतान कर सकता है (केवल इस सत्र के लिए ):

SET temp_buffers = 1000MB;

या कितना भी आप खर्च कर सकते हैं और रैम में अस्थायी तालिका को पकड़ने के लिए पर्याप्त है, जो बहुत तेज है। नोट:पहले किया जाना चाहिए सत्र में - किसी भी अस्थायी वस्तु के बनने से पहले।

आईडी पुनर्प्राप्त करें

आयातित डेटा के लिए सभी आईडी देखने के लिए:

SELECT tbl.tbl_id, tbl.title
FROM   tbl
JOIN   tmp USING (title)

उसी सत्र में! सत्र के अंत में एक अस्थायी तालिका स्वचालित रूप से हटा दी जाती है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. त्रुटि मान मौजूद नहीं है - postgresql INSERT INTO समस्या

  2. शामिल होने के साथ पोस्टग्रेस्क्ल अपडेट

  3. psql:FATAL:डेटाबेस <उपयोगकर्ता> मौजूद नहीं है

  4. माउंटेन लायन पोस्टग्रेज कनेक्ट नहीं हो सका

  5. पोस्टग्रेज़ के साथ डेटा डालें और विदेशी कुंजियाँ सेट करें