PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Beste Möglichkeit, doppelte Daten beim Kopieren von csv postgresql zu verhindern

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 BEI KONFLIKT EINFÜGEN Syntax.

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
;