Den korta versionen:"Det beror på".
Den långa versionen:
Om du gör en läs-modifiera-skriv-cykel måste den inte bara vara i en transaktion, utan du måste SELECT ... FOR UPDATE
alla poster som du senare tänker ändra. Annars riskerar du förlorade skrivningar, där du skriver över en uppdatering som någon annan gjort mellan när du läste posten och när du skrev uppdateringen.
SERIALIZABLE
transaktionsisolering kan också hjälpa till med detta.
Du måste verkligen förstå samtidighet och isolering. Tyvärr är det enda enkla, lätta "gör bara X"-svaret utan att förstå det att börja varje transaktion genom att låsa alla inblandade tabeller. De flesta människor vill inte göra det.
Jag föreslår en läsning (eller två, tre eller fyra - det är svårt material) av tx-isoleringsdokumenten
. Experimentera med samtidig psql
sessioner (flera terminaler) för att skapa tävlingsförhållanden och konflikter.