Кратката версия:„Зависи“.
Дългата версия:
Ако правите цикъл за четене-промяна-запис, тогава не само трябва да е в транзакция, но трябва да SELECT ... FOR UPDATE
всички записи, които по-късно възнамерявате да промените. В противен случай ще рискувате загубени записи, при които презаписвате актуализация, направена от някой друг между момента, в който сте прочели записа, и момента, в който сте написали актуализацията.
SERIALIZABLE
изолирането на транзакции също може да помогне с това.
Наистина трябва да разберете едновременността и изолацията. За съжаление единственият прост и лесен отговор „просто направете X“, без да го разбирате, е да започнете всяка транзакция, като заключите всички включени маси. Повечето хора не искат да правят това.
Предлагам да прочетете (или две, или три, или четири - това е труден материал) на документите за изолация на tx
. Експериментирайте с едновременен psql
сесии (множество терминали) за създаване на състезателни условия и конфликти.