PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Meilleur moyen d'éviter les données en double sur la copie csv postgresql

Mise à jour

La Réponse de Linoff est correct mais peut être un peu simplifié par Nouvelle fonctionnalité "UPSERT" de Postgres 9.5 (alias MERGE ). Cette nouvelle fonctionnalité est implémentée dans Postgres en tant que INSERT ON CONFLICT syntaxe.

Plutôt que de vérifier explicitement la violation de l'index unique, nous pouvons laisser le ON CONFLICT clause détecter la violation. Ensuite, nous ne DO NOTHING , ce qui signifie que nous abandonnons l'effort de INSERT sans prendre la peine de tenter une UPDATE . Donc, si nous ne pouvons pas insérer, nous passons simplement à la ligne suivante.

Nous obtenons les mêmes résultats que le code de Linoff mais perdons le WHERE clause.

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