È vero che INSERT
, UPDATE
o DELETE
deve acquisire ROW EXCLUSIVE
blocco sulla tabella da aggiornare.
Tuttavia, questo blocco non impedisce SELECT
dal lavorare normalmente. SELECT
richiede solo ACCESS SHARE
serratura. Questo lucchetto è compatibile con ROW EXCLUSIVE
- in altre parole, puoi eseguire perfettamente SELECT
mentre gli altri dati vengono aggiornati da INSERT
, UPDATE
o DELETE
, purché non si acquisiscano blocchi espliciti.
In altre parole, non dovresti mai vedere alcun deadlock usando il secondo approccio (basta non usare SELECT FOR UPDATE
e starai bene).
Maggiori informazioni nella documentazione PostgreSQL .