Re: easy task: concurrent select-updates

Поиск
Список
Период
Сортировка
От Andy Colson
Тема Re: easy task: concurrent select-updates
Дата
Msg-id 4AA2C694.9040402@squeakycode.net
обсуждение исходный текст
Ответ на Re: easy task: concurrent select-updates  (Nickolay <nitro@zhukcity.ru>)
Список pgsql-general
Nickolay wrote:
> Kevin McConnell wrote:
>>> CREATE OR REPLACE FUNCTION public.getmsg() RETURNS integer LANGUAGE
>>> plpgsql
>>> AS $function$
>>> declare
>>>       rec record;
>>> begin
>>>       for rec in select id from msg where busy =alse order by id loop
>>>               update msg set busy =rue where id = rec.id and busy =
>>> false;
>>>               if found then
>>>                       return rec.id;
>>>               end if;
>>>       end loop;
>>>       return -1;
>>> end;
>>> $function$
>>>
>>
>> I think you could also do something roughly similar in a statement by
>> using a RETURNING clause on the update, such as:
>>
>>   update msg set busy =rue where id = (select min(id) from msg where
>> busy =alse) returning *;
>>
>> Cheers,
>> Kevin
>>
>
> Thank you guys! But what's min(id) for? Is it neccessary? Is there any
> chance I can replace min(id) to LIMIT 1?
>
> Best regards, Nick.
>

min(id) finds the smallest id in the table.  We made the assumption that you wanted to get the messages out order by id
fromsmallest to largest. 

LIMIT 1 would be ok if you didnt care what order the messages were processed in.

-Andy

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

Предыдущее
От: Joshua Tolley
Дата:
Сообщение: Re: PG connections going to 'waiting'
Следующее
От: Chris Barnes
Дата:
Сообщение: Re: PG connections going to 'waiting'