>2. записываем новую запись t2 >3. аггрегатором вычисляем по t2 значение
важно понимать что на шаге 3 вы не увидите записи вставленные на шаге 2
13 апреля 2018 г., 14:24 пользователь Dmitry E. Oboukhov <unera@debian.org> написал:
> Привет > Вы в принципе не можете сделать select вне транзакции. Если вы делаете > запрос вне транзакции - этот запрос будет обёрнут в отдельную транзакцию > автоматически.
ну я примерно так и думал, просто решил уточнить :) > Не представляю зачем в вашем примере мог быть нужен s1 вообще - но да, > так брать блокировку возможно.
Я немного неудачно пример записал.
в моём случае второй запрос еще должен сделать insert в t2 на самом деле.
то есть полеый алгоритм такой:
1. ставим лок на запись t1 2. записываем новую запись t2 3. аггрегатором вычисляем по t2 значение 4. модифицируем запись в t1 на которую поставили лок
(условно говоря первая таблица - таблица со значениями неких счетчиков, вторая таблица - таблица с логом операций над счетчиками)
В целом у меня подобная система работает без блокировок, но на одном процессе (конкурентность отстуствует). Сейчас хочу запустить второй параллельный процесс. Он будет очень редко пересекаться по ID записей, однако поскольку пересечения возможны - задумался над локами.