Le righe sono bloccate nell'ordine di ORDER BY
clausola come era quando è stata scansionata la tabella .
La query viene eseguita e le righe ordinate, quindi PostgreSQL blocca le righe in ordine. In sostanza, ORDER BY
avviene prima di FOR UPDATE
.
Ora può succedere che bloccare una riga blocchi a causa di blocchi detenuti da transazioni simultanee. Se ciò accade, e siamo al READ COMMITTED
livello di isolamento, PostgreSQL attende finché non riesce a ottenere il blocco e quindi recupera la versione corrente della riga, che blocca.
Se la transazione simultanea ha modificato le colonne che definiscono l'ordinamento, il risultato finale non sarà nell'ordine definito da ORDER BY
.