Re: Need LIMIT and ORDER BY for UPDATE

Поиск
Список
Период
Сортировка
От John D. Burger
Тема Re: Need LIMIT and ORDER BY for UPDATE
Дата
Msg-id D2D51CCC-A554-41DF-BF76-FD3F7DB2AFD0@mitre.org
обсуждение исходный текст
Ответ на Re: Need LIMIT and ORDER BY for UPDATE  ("D. Dante Lorenso" <dante@lorenso.com>)
Список pgsql-general
D. Dante Lorenso wrote:

> Doesn't this create race condition in the query where multiple
> processes might find the same invoice_id while executing the inner
> select.  The update would then update the same record more than
> once during the update step and 2 processes might get the same
> invoice_id returned.  In otherwords, moving the select criteria
> into a sub-query breaks the atomic nature of the update.  Right?

Hmm, dunno.  Sorry, my grasp of concurrency issues is still infantile.

> I have been trying to doing something like this, though:

...

> By checking the reserve_ts inside the SELECT and again inside the
> UPDATE this should catch the race condition and only allow one
> process to perform the update on a given match.  If the other
> process has updated the reserve_ts already, the reserve_ts would
> not pass the second check.  However, the new side-effect is that
> one process would receive a NULL return result when the race
> condition occurs rather than just picking up the next queue
> invoice_id.

But this could happen in any event, if there are no more invoices to
process, yes?  I'm picturing a set of queue consumers, each of which
is already looping around such issues, anyway.

- John D. Burger
   MITRE



В списке pgsql-general по дате отправления:

Предыдущее
От: Bill Moran
Дата:
Сообщение: Re: Need LIMIT and ORDER BY for UPDATE
Следующее
От: "MG"
Дата:
Сообщение: autovacuum log?