sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Están las filas bloqueadas en orden en una instrucción SELECT... ORDER BY... FOR UPDATE?

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 .