Montag, Mai 18, 2015

Upsert in postgres

In meiner universitären Vergangenheit hätte ich es vielleicht "ein Desiderat der Forschung" genannt: ein Kommando, mit dessen Hilfe sich in postgres ein INSERT oder UPDATE in Abhängigkeit davon durchführen lässt, ob ein gegebener Schlüssel bereits in der Zieltabelle vorliegt. Diese in anderen Datenbanken als MERGE oder UPSERT bezeichnete Funktionalität ist seit vielen Jahren die wahrscheinlich größte Lücke im ansonsten sehr mächtigen SQL-Dialekt von postgres. Mit Release 9.5 wird diese Lücke nun offenbar endlich geschlossen - wobei sich die postgres-Entwickler dafür entschieden haben, die Option als Ergänzung des INSERT-Kommandos zu implementieren:
INSERT INTO ... VALUES ...
   ON CONFLICT
   DO UPDATE SET ...
Ein paar einführende Erläuterungen zum Verhalten liefern unter anderem Craig Kerstiens und Michael Paquier, vor allem aber Hubert Lubaczewski, der - wie üblich - die umfangreichste Untersuchung liefert und dabei auch die Performance betrachtet.

Keine Kommentare:

Kommentar veröffentlichen