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. UPSERT erschien mit PostgreSQL 9.5.

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

  • 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 →

Im Webarchiv suchen