Re: [SQL] Are PL/pgSQL calls atomic? - Mailing list pgsql-sql

From Vadim Mikheev
Subject Re: [SQL] Are PL/pgSQL calls atomic?
Date
Msg-id 3755D968.D3955172@krs.ru
Whole thread Raw
In response to Are PL/pgSQL calls atomic?  ("Mark Wright" <mwright@pro-ns.net>)
List pgsql-sql
Mark Wright wrote:
> 
> 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 where status = 'N');

6.5 allows you SELECT FOR UPDATE...

> 
> 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.

Vadim


pgsql-sql by date:

Previous
From: "D'Arcy" "J.M." Cain
Date:
Subject: Re: [SQL] Getting primary key from insert statement
Next
From: Sergey Zeleniy
Date:
Subject: VARCHAR & INDEXES. Context search. Need help.