Re: SELECT FOR UPDATE без транзакции - Mailing list pgsql-ru-general

From Timon
Subject Re: SELECT FOR UPDATE без транзакции
Date
Msg-id CAAeC-Svao8YPHb=VJ1AV1fv1d0PcX10swuLNubVWAb569EtCyg@mail.gmail.com
Whole thread Raw
In response to Re: SELECT FOR UPDATE без транзакции  ("Dmitry E. Oboukhov" <unera@debian.org>)
Responses Re: SELECT FOR UPDATE без транзакции  ("Dmitry E. Oboukhov" <unera@debian.org>)
List pgsql-ru-general
>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 записей,
однако поскольку пересечения возможны - задумался над локами.



--

. ''`.            Dmitry E. Oboukhov <unera@debian.org>
: :’  :
`. `~’               GPG key: 4096R/08EEA756 2014-08-30
  `- 71ED ACFC 6801 0DD9 1AD1  9B86 8D1F 969A 08EE A756



--
All bugs reserved

pgsql-ru-general by date:

Previous
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: SELECT FOR UPDATE без транзакции
Next
From: "Dmitry E. Oboukhov"
Date:
Subject: Re: SELECT FOR UPDATE без транзакции