Качановский Дмитрий wrote:

а насколько атомарен вот такой

Выше уже говорили, что термин "атомарность" имеет несколько другое значение.

update some_table set counter = counter + 1 where id = :id

т.е. насколько гарантировано, что если оператор прочитал данные и решил их менять, какова вероятность, что кто-нибудь другой (в конкурирующей транзакции) не изменит данные (согласись, что даже ооочень короткие операции могут выполниться одновременно) и что в этом случае произойдет

Update conflict, вестимо.

а еще вот, вот такая конструкция

for select id ....
from some_table
order by id ....
do
  update some_table set counter = counter + 1 where id = :id

как она воспринимается сервером
1. получение курсора и последовательность самостоятельных вызовов update

Именно так.


--
Дмитрий Еманов

Ответить