PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Le righe sono bloccate in ordine in un'istruzione SELECT ... ORDER BY ... FOR UPDATE?

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 .