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

एक बड़ी तालिका में पूर्ण डुप्लिकेट पंक्तियों की जाँच करें

यह पता लगाने के लिए कि क्या कोई पूर्ण डुप्लिकेट मौजूद है (सभी स्तंभों पर समान), यह संभवतः सबसे तेज़ तरीका है:

SELECT EXISTS (
    SELECT 1
    FROM   tbl t
    NATURAL JOIN tbl t1 
    WHERE  t.ctid <> t1.ctid
    )

प्राकृतिक जॉइन मामले के लिए एक बहुत ही सुविधाजनक आशुलिपि है क्योंकि (उद्धरण मैनुअल यहाँ ):

EXISTS कोड> शायद सबसे तेज़ है, क्योंकि जैसे ही पहला डुप्लिकेट मिलता है, पोस्टग्रेज़ खोजना बंद कर देता है। चूंकि संभवतः आपके पास पूरी पंक्ति को कवर करने वाली अनुक्रमणिका नहीं है और आपकी तालिका बहुत बड़ी है, यह आपको काफी बचाएगा समय की।

ध्यान रखें कि NULL है कभी नहीं दूसरे के समान माना जाता है NULL . अगर आपके पास NULL है मान लें और उन्हें समान मानें, तो आपको और अधिक करना होगा।

ctid एक सिस्टम कॉलम है जिसका उपयोग (ab-) तदर्थ प्राथमिक कुंजी के रूप में किया जा सकता है, लेकिन लंबे समय में वास्तविक उपयोगकर्ता-परिभाषित प्राथमिक कुंजी को प्रतिस्थापित नहीं कर सकता है।

ऐसा लगता है कि पुराने संस्करण 8.1 में कोई नहीं है एक ctid . के लिए परिभाषित ऑपरेटर . पाठ . पर कास्ट करने का प्रयास करें :

SELECT EXISTS (
    SELECT 1
    FROM   tbl t
    NATURAL JOIN tbl t1 
    WHERE  t.ctid::text <> t1.ctid::text
    )


  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. यदि कमांड-लाइन पर निर्दिष्ट नहीं है तो केवल psql-script में वेरिएबल सेट करें

  3. दो तिथियों के बीच सटीक माह-अंतर की गणना करें

  4. PostgreSQL में डेटाबेस को सूचीबद्ध करना और स्विच करना

  5. Postgres 9.6+ में लंबाई N की एक यादृच्छिक, अद्वितीय, अल्फ़ान्यूमेरिक आईडी कैसे उत्पन्न करें?