Re: blocking INSERTs

Поиск
Список
Период
Сортировка
От Douglas McNaught
Тема Re: blocking INSERTs
Дата
Msg-id m2r7fd1pbg.fsf@Douglas-McNaughts-Powerbook.local
обсуждение исходный текст
Ответ на blocking INSERTs  (Joseph Shraibman <jks@selectacast.net>)
Список pgsql-general
Joseph Shraibman <jks@selectacast.net> writes:

> I want to do the following:
>
> BEGIN;
> SELECT ... FROM table WHERE a = 1 FOR UPDATE;
> UPDATE table SET ... WHERE a = 1;
> if that resturns zero then
> INSERT INTO table (...) VALUES (...);
> END;
>
> The problem is that I need to avoid race conditions.  Sometimes I get
> primary key exceptions on the INSERT.
>
> I think I need to lock the table in share mode to keep inserts from
> happening, but that blocks vacuums, and blocked vacuums block other
> things behind them.  So how do I get around this?

Ummm...  Don't lock the table for very long?  :)  If you commit
your transaction promptly then the table will be unlocked again.

-Doug

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

Предыдущее
От: Joseph Shraibman
Дата:
Сообщение: blocking INSERTs
Следующее
От: Tom Lane
Дата:
Сообщение: Re: return two elements