Re: Atomic/locked "allocation" of table row?

Поиск
Список
Период
Сортировка
От Sten Daniel Soersdal
Тема Re: Atomic/locked "allocation" of table row?
Дата
Msg-id 46B7308E.30908@gmail.com
обсуждение исходный текст
Ответ на Re: Atomic/locked "allocation" of table row?  (Richard Broersma Jr <rabroersma@yahoo.com>)
Ответы Re: Atomic/locked "allocation" of table row?  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-novice
Richard Broersma Jr wrote:
> --- Sten Daniel Soersdal <netslists@gmail.com> wrote:
>
>> But i need to know that no other concurrently running session would
>> allocate that specific row in between the SELECT ... and the UPDATE.
>>
>> Could this be done atomically somehow? Is it necessary to add some kind
>> of locking? Help?
>
> If you have many sessions that are going to run this update statement and you want to ensure that
> they are all isolatated, you could wrap all of these sessions' update statements in transactions.
> Then any other sessions that try to update the same row will return an exception stating that
> another transaction modified the specific row.
>
> BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
>
> UPDATE Tunnel
>    SET password = 'mysecret'
>  WHERE username = ( SELECT username
>                       FROM Tunnel
>                      WHERE password IS NULL
>                      LIMIT 1 );
> COMMIT TRANSACTION;
>

According to the manual it says that this would sometimes fail when
"serializable" isolation cannot be obtained, is there any way to make it
wait for it? Or do i have to wrap the transaction with an exception clause?

--
Sten Daniel Soersdal

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

Предыдущее
От: Richard Broersma Jr
Дата:
Сообщение: Re: Atomic/locked "allocation" of table row?
Следующее
От: Luca Ferrari
Дата:
Сообщение: Re: doubt about datum