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
;