PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Soll ich SELECTs in eine Transaktion einbeziehen?

Die Kurzversion:"Es kommt darauf an".

Die lange Version:

Wenn Sie einen Read-Modify-Write-Zyklus durchführen, dann muss es sich nicht nur um eine Transaktion handeln, sondern Sie müssen SELECT ... FOR UPDATE alle Datensätze, die Sie später ändern möchten. Andernfalls riskieren Sie verlorene Schreibvorgänge, bei denen Sie eine Aktualisierung überschreiben, die jemand anderes zwischen dem Lesen des Datensatzes und dem Schreiben der Aktualisierung vorgenommen hat.

SERIALIZABLE Dabei kann auch die Transaktionsisolation hilfreich sein.

Sie müssen Nebenläufigkeit und Isolation wirklich verstehen. Unglücklicherweise ist die einzig einfache, einfache Antwort, "einfach X zu tun", ohne es zu verstehen, jede Transaktion mit dem Sperren aller beteiligten Tabellen zu beginnen. Die meisten Leute wollen das nicht.

Ich schlage vor, die Dokumentation zur TX-Isolation . Experimentieren Sie mit gleichzeitigem psql Sitzungen (mehrere Terminals), um Rennbedingungen und Konflikte zu erzeugen.