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 по дате отправления: