From: | Ottavio Campana <ottavio(at)campana(dot)vi(dot)it> |
---|---|
To: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: concurrency in stored procedures |
Date: | 2007-03-23 21:42:05 |
Message-ID: | 460449AD.9090204@campana.vi.it |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Merlin Moncure wrote:
> 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.
am I wrong or are advisory locks available only in 8.2?
Anyway, apart from a couple of errors in the code i wrote (an in isn't
closed and exception handling is not correctly written), can I be sure
that the code in the sub-block works an a snapshot of the db?
Thank you
--
Non c'e' piu' forza nella normalita', c'e' solo monotonia.
From | Date | Subject | |
---|---|---|---|
Next Message | araza | 2007-03-23 22:35:39 | Re: Insert fail: could not open relation with OID 3221204992 |
Previous Message | Merlin Moncure | 2007-03-23 21:22:32 | Re: concurrency in stored procedures |