Nach oben einfügen
Die Antwort von Linoff
ist korrekt, kann aber durch Postgres 9.5 neue „UPSERT“-Funktion
etwas vereinfacht werden (auch bekannt als MERGE
). Diese neue Funktion ist in Postgres als
Anstatt explizit auf Verletzung des eindeutigen Index zu prüfen, können wir ON CONFLICT
lassen Klausel den Verstoß erkennen. Dann TUEN WIR NICHTS
, was bedeutet, dass wir den Aufwand für INSERT
aufgeben ohne sich die Mühe zu machen, ein UPDATE
zu versuchen . Wenn wir also nicht einfügen können, gehen wir einfach zur nächsten Zeile weiter.
Wir erhalten die gleichen Ergebnisse wie Linoffs Code, verlieren aber das WHERE
Klausel.
INSERT INTO bigtable(col1, … )
SELECT col1, …
FROM stagingtable st
ON CONFLICT idx_bigtable_col1_col2_col
DO NOTHING
;