Re: UPDATE/DELETE XXX WHERE CURRENT OF cursor_name - Mailing list pgsql-hackers

From Tom Lane
Subject Re: UPDATE/DELETE XXX WHERE CURRENT OF cursor_name
Date
Msg-id 11085.1153754764@sss.pgh.pa.us
Whole thread Raw
In response to Re: UPDATE/DELETE XXX WHERE CURRENT OF cursor_name  ("Florian G. Pflug" <fgp@phlo.org>)
Responses Re: UPDATE/DELETE XXX WHERE CURRENT OF cursor_name  ("Florian G. Pflug" <fgp@phlo.org>)
List pgsql-hackers
"Florian G. Pflug" <fgp@phlo.org> writes:
> Couldn't this be emulated by doing
> begin;
> declare foo cursor for select * from bar for update;
> fetch foo into v_foo ;
> update bar set abc='def' where ctid = v_foo.ctid;

That wouldn't follow the expected semantics if there's a concurrent
update, because the updated row would always fail the WHERE clause,
and thus the update would just silently not happen.  (I'm thinking
about READ COMMITTED mode of course --- in SERIALIZABLE you'd just get
the expected error.)  You'd have to find some way to pump the row's most
up-to-date version through the cursor's query plan, a la EvalPlanQual,
to see if it still met the cursor's WHERE condition.
        regards, tom lane


pgsql-hackers by date:

Previous
From: Rod Taylor
Date:
Subject: Re: Better name/syntax for "online" index creation
Next
From: Alvaro Herrera
Date:
Subject: Re: UPDATE/DELETE XXX WHERE CURRENT OF cursor_name