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

La mejor manera de evitar datos duplicados en la copia csv postgresql

Inserción

La Respuesta de Linoff es correcto, pero se puede simplificar un poco con nueva función ”UPSERT“ de Postgres 9.5 (también conocido como MERGE ). Esa nueva función se implementa en Postgres como INSERT ON CONFLICT sintaxis.

En lugar de verificar explícitamente la violación del índice único, podemos dejar que ON CONFLICT cláusula detectar la violación. Entonces DO NOTHING , lo que significa que abandonamos el esfuerzo de INSERT sin molestarse en intentar UPDATE . Entonces, si no podemos insertar, simplemente pasamos a la siguiente fila.

Obtenemos los mismos resultados que el código de Linoff pero perdemos el WHERE cláusula.

INSERT INTO bigtable(col1, … )
    SELECT col1, …
    FROM stagingtable st
ON CONFLICT idx_bigtable_col1_col2_col
DO NOTHING
;