From: | "Merlin Moncure" <mmoncure(at)gmail(dot)com> |
---|---|
To: | "Ottavio Campana" <ottavio(at)campana(dot)vi(dot)it> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: concurrency in stored procedures |
Date: | 2007-03-23 21:22:32 |
Message-ID: | b42b73150703231422n2ea5dda5wb1edf5dfd1aa0b2d@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 3/23/07, Ottavio Campana <ottavio(at)campana(dot)vi(dot)it> wrote:
> Ottavio Campana wrote:
> > What would you to in order to be sure that one function or a part of it
> > is atomically executed?
>
> would it be correct something like? or how would you write this?
>
> create or replace function my_function () returs integer as
> $$
> declare
> ...
> status boolean;
> ...
> begin
> ...
> loop
> begin
> set transaction isolation level serializable;
> ...
> do_something();
> ...
> status := true;
> exception serialization_failure
> status := false;
> end;
>
> if status then exit;
> end loop;
> ...
> return 0;
> end
> $$ language plpgsql
you can also use advisory locks if you want to implement 'critical
section' inside a plpgsql function.
see:
http://merlinmoncure.blogspot.com/2006/12/advisory-locks-part-2.html
merlin
From | Date | Subject | |
---|---|---|---|
Next Message | Ottavio Campana | 2007-03-23 21:42:05 | Re: concurrency in stored procedures |
Previous Message | Tom Lane | 2007-03-23 21:19:54 | Re: Insert fail: could not open relation with OID 3221204992 |