Re: plpgsql function with update and seeing changed data from outside during run

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Merlin Moncure <mmoncure(at)gmail(dot)com>
Cc: Craig Ringer <craig(at)postnewspapers(dot)com(dot)au>, Clemens Schwaighofer <clemens(dot)schwaighofer(at)e-graphics(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: plpgsql function with update and seeing changed data from outside during run
Date: 2011-06-09 14:19:32
Message-ID: 23091.1307629172@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Merlin Moncure <mmoncure(at)gmail(dot)com> writes:
> On Thu, Jun 9, 2011 at 4:46 AM, Craig Ringer
> <craig(at)postnewspapers(dot)com(dot)au> wrote:
>> (as far as I know) It's not possible for a function to see data committed by
>> other transactions since that function began executing, whether or not those
>> other transactions have committed.

> This is not correct. Yes, a snapshot is created, but that doesn't
> prevent you from seeing external changes. I have in fact many times
> relied on being able to block in a pl/pgsql loop and wait for a record
> to be set or something like that.

Note that the function needs to be declared VOLATILE for that to work.

But I believe the OP's question was the other way around: he wanted to
be able to see changes made by a function from elsewhere, before the
function completes. That's not possible, unless you resort to hacks
like using dblink to get the effect of autonomous subtransactions.

regards, tom lane

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Vincent Veyron 2011-06-09 14:35:58 Re: what is the best way of storing text+image documents in postgresql
Previous Message tv 2011-06-09 14:06:29 Re: Write performance on a large database