Si puede permitirse reescribir toda la tabla, este es probablemente el enfoque más simple:
WITH Deleted AS (
DELETE FROM discogs.releases_labels
RETURNING *
)
INSERT INTO discogs.releases_labels
SELECT DISTINCT * FROM Deleted
Si necesita apuntar específicamente a los registros duplicados, puede utilizar el ctid
interno. campo, que identifica de forma única una fila:
DELETE FROM discogs.releases_labels
WHERE ctid NOT IN (
SELECT MIN(ctid)
FROM discogs.releases_labels
GROUP BY label, release_id, catno
)
Mucho cuidado con ctid
; cambia con el tiempo. Pero puede confiar en que permanecerá igual dentro del alcance de una sola declaración.