Se puoi permetterti di riscrivere l'intera tabella, questo è probabilmente l'approccio più semplice:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Se hai bisogno di indirizzare in modo specifico i record duplicati, puoi utilizzare il ctid
interno campo, che identifica in modo univoco una riga:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Fai molta attenzione con ctid
; cambia nel tempo. Ma puoi fare affidamento sul fatto che rimanga lo stesso nell'ambito di una singola affermazione.