sql >> Base de Datos >  >> RDS >> PostgreSQL

Eliminar filas duplicadas de la tabla sin clave única

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.