PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Les lignes sont-elles verrouillées dans l'ordre dans une instruction SELECT ... ORDER BY ... FOR UPDATE ?

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 .