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
Der Link zur Originalquelle öffnet einen neuen Tab.