Den korte version:"Det afhænger af".
Den lange version:
Hvis du laver en læs-modificere-skrive-cyklus, skal den ikke kun være i en transaktion, men du skal SELECT ... FOR UPDATE
alle optegnelser, du senere agter at ændre. Ellers risikerer du tabte skrivninger, hvor du overskriver en opdatering, som en anden har lavet mellem det tidspunkt, du læste posten, og da du skrev opdateringen.
SERIALIZABLE
transaktionsisolering kan også hjælpe med dette.
Du skal virkelig forstå samtidighed og isolation. Desværre er det eneste enkle, nemme "bare gør X"-svar uden at forstå det, at begynde hver transaktion ved at låse alle de involverede tabeller. De fleste mennesker ønsker ikke at gøre det.
Jeg foreslår en læsning (eller to, eller tre eller fire - det er hårdt materiale) af tx-isolationsdokumenterne
. Eksperimenter med samtidig psql
sessioner (flere terminaler) for at skabe raceforhold og konflikter.