Are PL/pgSQL calls atomic?
От | Mark Wright |
---|---|
Тема | Are PL/pgSQL calls atomic? |
Дата | |
Msg-id | 001f01bead45$d72f9100$c62812ac@markw_compaq обсуждение исходный текст |
Ответы |
Re: [SQL] Are PL/pgSQL calls atomic?
|
Список | pgsql-sql |
If I call a PL/pgSQL function, and another client makes the same call, does the second client have to wait for the first to complete execution before it begins? If not, is there some sort of mechanism I can use to prevent more than one call to a function from happening at the same time (something like a mutex in Win32). I need to select a row and then mark it as unavailable for other clients to use. The table looks like: create table xyz (id serial, status char default 'N', ...); My function finds a row by doing: select id into my_id_variable from xyz where id = (select min(id) from xyz wherestatus = 'N'); and then marks that row as unavailable by setting status: update xyz set status = 'Y' where id = my_id_variable; Obviously, if a second client calls this function before the UPDATE takes place, it will pick up the same row as the first client, causing rending of hair and gnashing of teeth. How do I prevent this? Mark. --- Mark Wright mwright@pro-ns.net mark_wright@datacard.com
В списке pgsql-sql по дате отправления: