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
;