यदि आप पूरी तालिका को फिर से लिखने का जोखिम उठा सकते हैं, तो यह शायद सबसे आसान तरीका है:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
यदि आपको डुप्लीकेट रिकॉर्ड को विशेष रूप से लक्षित करने की आवश्यकता है, तो आप आंतरिक ctid
. का उपयोग कर सकते हैं फ़ील्ड, जो विशिष्ट रूप से एक पंक्ति की पहचान करता है:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
ctid
. से बहुत सावधान रहें; यह समय के साथ बदलता है। लेकिन आप एक ही कथन के दायरे में समान रहकर उस पर भरोसा कर सकते हैं।