Las filas están bloqueadas en el orden de ORDER BY
cláusula como estaba cuando se escaneó la tabla .
La consulta se ejecuta y las filas se ordenan, luego PostgreSQL bloquea las filas en orden. Esencialmente, ORDER BY
ocurre antes de FOR UPDATE
.
Ahora puede suceder que bloquear una fila debido a bloqueos retenidos por transacciones concurrentes. Si eso sucede, y estamos en el READ COMMITTED
nivel de aislamiento, PostgreSQL espera hasta que pueda obtener el bloqueo y luego obtiene la versión actual de la fila, que bloquea.
Si la transacción concurrente modificó las columnas que definen el orden, el resultado final no estará en el orden definido por ORDER BY
.