| From: | "Dmitry E(dot) Oboukhov" <unera(at)debian(dot)org> |
|---|---|
| To: | pgsql-ru-general(at)lists(dot)postgresql(dot)org |
| Subject: | Re: SELECT FOR UPDATE без транзакции |
| Date: | 2018-04-13 11:24:46 |
| Message-ID: | 20180413112446.gkf4fpduh5y4gtfn@vdsl.uvw.ru |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-ru-general |
> Привет
> Вы в принципе не можете сделать select вне транзакции. Если вы делаете
> запрос вне транзакции - этот запрос будет обёрнут в отдельную транзакцию
> автоматически.
ну я примерно так и думал, просто решил уточнить :)
> Не представляю зачем в вашем примере мог быть нужен s1 вообще - но да,
> так брать блокировку возможно.
Я немного неудачно пример записал.
в моём случае второй запрос еще должен сделать insert в t2 на самом
деле.
то есть полеый алгоритм такой:
1. ставим лок на запись t1
2. записываем новую запись t2
3. аггрегатором вычисляем по t2 значение
4. модифицируем запись в t1 на которую поставили лок
(условно говоря первая таблица - таблица со значениями неких
счетчиков, вторая таблица - таблица с логом операций над счетчиками)
В целом у меня подобная система работает без блокировок, но на одном
процессе (конкурентность отстуствует). Сейчас хочу запустить второй
параллельный процесс. Он будет очень редко пересекаться по ID записей,
однако поскольку пересечения возможны - задумался над локами.
--
. ''`. Dmitry E. Oboukhov <unera(at)debian(dot)org>
: :’ :
`. `~’ GPG key: 4096R/08EEA756 2014-08-30
`- 71ED ACFC 6801 0DD9 1AD1 9B86 8D1F 969A 08EE A756
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Timon | 2018-04-13 11:28:49 | Re: SELECT FOR UPDATE без транзакции |
| Previous Message | Sergei Kornilov | 2018-04-13 08:38:08 | Re: SELECT FOR UPDATE без транзакции |