Se você puder reescrever a tabela inteira, esta é provavelmente a abordagem mais simples:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Se você precisar segmentar especificamente os registros duplicados, poderá usar o
ctid
interno campo, que identifica exclusivamente uma linha:DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Tenha muito cuidado com
ctid
; ele muda com o tempo. Mas você pode confiar que ele permanecerá o mesmo dentro do escopo de uma única declaração.