Les lignes sont verrouillées dans l'ordre du ORDER BY
clause telle qu'elle était lors de l'analyse de la table .
La requête est exécutée et les lignes ordonnées, puis PostgreSQL verrouille les lignes dans l'ordre. Essentiellement, ORDER BY
se produit avant FOR UPDATE
.
Maintenant, il peut arriver que le verrouillage d'une ligne bloque à cause des verrous détenus par des transactions concurrentes. Si cela se produit, et nous sommes au READ COMMITTED
niveau d'isolement, PostgreSQL attend jusqu'à ce qu'il puisse obtenir le verrou et puis récupère la version actuelle de la ligne, qu'il verrouille.
Si la transaction concurrente a modifié les colonnes qui définissent l'ordre, le résultat final ne sera pas dans l'ordre défini par ORDER BY
.