Are PL/pgSQL calls atomic?

From: "Mark Wright" <mwright(at)pro-ns(dot)net>
To: <pgsql-sql(at)postgresql(dot)org>
Subject: Are PL/pgSQL calls atomic?
Date: 1999-06-02 22:18:19
Message-ID: 001f01bead45$d72f9100$c62812ac@markw_compaq
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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 where status = '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(at)pro-ns(dot)net
mark_wright(at)datacard(dot)com

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message D'Arcy J.M. Cain 1999-06-02 22:54:33 Re: [SQL] Getting primary key from insert statement
Previous Message Pham, Thinh 1999-06-02 21:46:28 Getting primary key from insert statement