bk99.de entertain the web since 1997

PostgreSQL erhält atomisches UPSERT

Zusammenfassung

Peter Geoghegan implementiert INSERT ON CONFLICT und verbindet Einfügen sowie Konfliktbehandlung in einer nebenläufig sicheren Anweisung.

Ideen

  • Ein eindeutiger Index erkennt kollidierende Schlüssel atomisch.
  • ON CONFLICT DO NOTHING verwirft erwartete Duplikate.
  • DO UPDATE verändert die bereits vorhandene Zeile.
  • Die Datenbank löst Wettläufe zwischen parallelen Schreibern.

Einsichten

  • Atomare Datenbankoperationen sind sicherer als getrennte Prüfen-und-Schreiben-Sequenzen.
  • Nebenläufigkeit macht scheinbar einfache Anwendungslogik fehleranfällig.
  • Eindeutige Constraints sind Integritätsregeln und Synchronisationsprimitive zugleich.

Fakten

  • UPSERT erschien mit PostgreSQL 9.5.
  • Die Syntax lautet INSERT ON CONFLICT.
  • Konfliktziele können eindeutige Indizes verwenden.

Empfehlungen

  • Definiere fachliche Eindeutigkeit als Datenbankconstraint.
  • Teste konkurrierende Schreibvorgänge statt nur Einzelfälle.

Referenzen

Originalartikel lesen →