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