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

Sind die Zeilen in einer Anweisung SELECT ... ORDER BY ... FOR UPDATE der Reihe nach gesperrt?

Die Zeilen werden in der Reihenfolge des ORDER BY gesperrt Klausel wie beim Scannen der Tabelle .

Die Abfrage wird ausgeführt und die Zeilen sortiert, dann sperrt PostgreSQL die Zeilen der Reihe nach. Im Wesentlichen ORDER BY geschieht vor FOR UPDATE .

Nun kann es passieren, dass das Sperren einer Zeile blockiert aufgrund von Sperren, die von gleichzeitigen Transaktionen gehalten werden. Wenn das passiert, sind wir beim READ COMMITTED Isolationsstufe, PostgreSQL wartet bis es die Sperre erhalten kann und dann die aktuelle Version holt der Reihe, die es sperrt.

Wenn die gleichzeitige Transaktion die Spalten geändert hat, die die Reihenfolge definieren, wird das Endergebnis nicht in der durch ORDER BY definierten Reihenfolge sein .