Ich habe über verschiedene UPSERT
Implementierungen in PostgreSQL gelesen , aber alle diese Lösungen sind relativ alt oder relativ exotisch ( z. B. mit beschreibbarem CTE ).
Und ich bin überhaupt kein psql-Experte, der sofort herausfindet, ob diese Lösungen alt sind, weil sie gut empfohlen werden oder (na ja, fast alle von ihnen sind) nur Spielzeugbeispiele, die für den Produktionsgebrauch nicht geeignet sind.
Was ist die threadsicherste Möglichkeit, UPSERT in PostgreSQL zu implementieren?
postgresql
plpgsql
upsert
shabunc
quelle
quelle
UPDATE (20.08.2015):
Es gibt jetzt eine offizielle Implementierung für die Behandlung von Upserts durch die Verwendung von
ON CONFLICT DO UPDATE
(offizielle Dokumentation). Zum Zeitpunkt des Schreibens befindet sich diese Funktion derzeit in PostgreSQL 9.5 Alpha 2, das hier heruntergeladen werden kann: Postgres-Quellverzeichnisse .Hier ist ein Beispiel, vorausgesetzt, es
item_id
ist Ihr Primärschlüssel:Ursprünglicher Beitrag ...
Hier ist eine Implementierung, auf die ich gestoßen bin, um einen Überblick darüber zu erhalten, ob eine Einfügung oder Aktualisierung stattgefunden hat.
Die Definition von
upsert_data
ist, die Werte in einer einzelnen Ressource zu konsolidieren, anstatt den Preis und die item_id zweimal angeben zu müssen: Einmal für die Aktualisierung, noch einmal für die Einfügung.Wenn Sie die Verwendung von nicht mögen
upsert_data
, finden Sie hier eine alternative Implementierung:quelle
Hier erfahren Sie, ob das Einfügen oder Aktualisieren stattgefunden hat:
Wenn das Update ausgeführt wird, erhalten Sie eine Einfügung 0, andernfalls eine Einfügung 1 oder einen Fehler.
quelle