PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Melhor maneira de evitar dados duplicados na cópia csv postgresql

Upsert


A Resposta de Linoff está correto, mas pode ser um pouco simplificado pelo novo recurso ”UPSERT“ do ​​Postgres 9.5 (também conhecido como MERGE ). Esse novo recurso é implementado no Postgres como INSERT ON CONFLICT sintaxe.

Em vez de verificar explicitamente a violação do índice exclusivo, podemos deixar o ON CONFLICT cláusula detectar a violação. Então nós DO NOTHING , o que significa que abandonamos o esforço de INSERT sem se preocupar em tentar um UPDATE . Portanto, se não pudermos inserir, apenas passamos para a próxima linha.

Obtemos os mesmos resultados que o código de Linoff, mas perdemos o WHERE cláusula.
INSERT INTO bigtable(col1, … )
    SELECT col1, …
    FROM stagingtable st
ON CONFLICT idx_bigtable_col1_col2_col
DO NOTHING
;