Wenn Sie es sich leisten können, die gesamte Tabelle neu zu schreiben, ist dies wahrscheinlich der einfachste Ansatz:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Wenn Sie gezielt auf die duplizierten Datensätze abzielen müssen, können Sie die interne ctid
verwenden Feld, das eine Zeile eindeutig identifiziert:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Seien Sie sehr vorsichtig mit ctid
; es ändert sich im laufe der zeit. Aber Sie können sich darauf verlassen, dass es im Rahmen einer einzigen Aussage gleich bleibt.