Re: select for update question
От | Daniel Staal |
---|---|
Тема | Re: select for update question |
Дата | |
Msg-id | 35e1764dd57bfb435f81184ffd39ea37.squirrel@www.magehandbook.com обсуждение исходный текст |
Ответ на | Re: select for update question (A B <gentosaker@gmail.com>) |
Список | pgsql-novice |
On Wed, January 13, 2010 9:55 am, A B wrote: >>> I'm looking into how to update a row in a table while protecting it >>> from access by others. >>> >>> so far I've come up with this solution: >>> >>> create function dostuff() returns void as $$ >>> declare >>> tmp integer; >>> begin >>> select id into tmp from tableX where id>305 limit 1 for update; >>> update tableX set some_field = some_value where id=tmp; >>> end; $$ language plpgsql; >>> >>> will that guarantee that the row I selected wil be updated within >>> this function and no one else can sneak in between and update or >>> delete the row? >>> >>> >>> What would I use if I would write >>> >>> lock table tableX IN .... MODE at the start of my function? >>> >>> Any particular benefit with either method? >> >> If you lock the table, the whole table is locked. The first method (with >> select for update) locks only the one record you want to update. >> >> For real multi-user-access the first method are better. > > When will it stop beeing a better method? When you select a large > enough percentage of the rows? Where 'large enough' is some number greater than 95%, maybe. In general, unless you are actually doing something on the _entire_ table, you don't want to lock the table. Save that for table maintenance/revision. After all, you are using a database, and one of the points of a database is that more than one process can use it at a time. Daniel T. Staal --------------------------------------------------------------- This email copyright the author. Unless otherwise noted, you are expressly allowed to retransmit, quote, or otherwise use the contents for non-commercial purposes. This copyright will expire 5 years after the author's death, or in 30 years, whichever is longer, unless such a period is in excess of local copyright law. ---------------------------------------------------------------
В списке pgsql-novice по дате отправления: