Krótka wersja:„To zależy”.
Długa wersja:
Jeśli robisz cykl odczytu-modyfikacji-zapisu, to nie tylko musi to być transakcja, ale musisz SELECT ... FOR UPDATE
wszelkie zapisy, które zamierzasz później modyfikować. W przeciwnym razie ryzykujesz utratę zapisów, gdy nadpisujesz aktualizację dokonaną przez kogoś innego między przeczytaniem rekordu a napisaniem aktualizacji.
SERIALIZABLE
izolacja transakcji również może w tym pomóc.
Naprawdę musisz zrozumieć współbieżność i izolację. Niestety, jedyną prostą i łatwą odpowiedzią typu „po prostu zrób X” bez zrozumienia tego jest rozpoczęcie każdej transakcji od zablokowania wszystkich stołów. Większość ludzi nie chce tego robić.
Proponuję przeczytać (albo dwa, trzy, albo cztery - to twardy materiał) dokumentacja izolacji tx
. Eksperymentuj z równoczesnym psql
sesje (wiele terminali) w celu stworzenia warunków wyścigu i konfliktów.