funciona tanto para SQL NORMAL y PostgreSQL (también trabaja en AWS CORRIMIENTO AL ROJO)
DROP TABLE IF EXISTS backupOfTheTableContainingDuplicates;
CREATE TABLE aNewEmptyTemporaryOrBackupTable
AS SELECT DISTINCT * FROM originalTableContainingDuplicates;
TRUNCATE TABLE originalTableContainingDuplicates;
INSERT INTO originalTableContainingDuplicates SELECT * FROM
aNewEmptyTemporaryOrBackupTable ;
DROP TABLE aNewEmptyTemporaryOrBackupTable ;
EXPLICACIÓN DE LA ANTERIOR SQL Script
Así,
La primera la consulta asegura, si tiene una copia de seguridad/tabla temporal de la tabla original que contiene g duplicados luego primero suelta esa tabla.
La segunda consulta, crea una nueva tabla (temporal/de respaldo) tabla con entradas únicas en la tabla original que contiene duplicados, por lo que la nueva tabla temporal es igual a la tabla original. MINIMA las entradas duplicadas.
La 3ª consulta, trunca o vacía la tabla original.
la 4ª consulta, inserta o copia todas las entradas únicas en la tabla temporal a la tabla original que se ha truncado recientemente (por lo que no tiene datos). Después de que se ejecute esta consulta, la tabla original se rellenará con datos ÚNICOS que estaban en la tabla temporal.
La quinta consulta, elimina/gotas de la tabla temporal innecesaria.
resultado final es Así, la tabla original tiene sólo entradas únicas y no hay duplicados.
Perfecto, gracias! No sabía acerca de ctid –
¡No lo use, es demasiado lento! –
Si bien esta solución definitivamente funciona, @rapimo [la solución a continuación] (https://stackoverflow.com/a/12963112/1156554) se ejecuta mucho más rápido. Creo que esto tiene que ver con la instrucción de selección interna aquí que se ejecuta N veces (para todas las N filas en la tabla dupes) en lugar de la agrupación que está sucediendo en la otra solución. – David