Krátká verze:"To závisí".
Dlouhá verze:
Pokud provádíte cyklus čtení-úpravy-zápisu, pak to nejen musí být v transakci, ale musíte SELECT ... FOR UPDATE
jakékoli záznamy, které chcete později upravit. V opačném případě riskujete ztrátu zápisů, kdy přepíšete aktualizaci provedenou někým jiným v době mezi čtením záznamu a zapisováním aktualizace.
SERIALIZABLE
s tím může pomoci také izolace transakcí.
Opravdu musíte pochopit souběžnost a izolaci. Bohužel jedinou jednoduchou a snadnou odpovědí „stačí udělat X“, aniž byste jí rozuměli, je začít každou transakci uzamčením všech zúčastněných tabulek. Většina lidí to nechce udělat.
Doporučuji přečíst (nebo dva, tři nebo čtyři – je to tvrdý materiál) dokumenty k izolaci TX
. Experimentujte se souběžným psql
relací (více terminálů) k vytvoření podmínek závodu a konfliktů.