From: | David Fetter <david(at)fetter(dot)org> |
---|---|
To: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
Cc: | pgsql-bugs(at)postgresql(dot)org |
Subject: | Re: BUG #5754: CTE optimization fails to account for side effects |
Date: | 2010-11-16 14:35:30 |
Message-ID: | 20101116143530.GA21423@fetter.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
On Mon, Nov 15, 2010 at 06:55:47PM -0500, Tom Lane wrote:
> "David Fetter" <david(at)fetter(dot)org> writes:
> > CREATE SEQUENCE my_seq;
> > WITH t AS (SELECT nextval('my_seq')) VALUES(1);
> > SELECT currval('my_seq');
>
> > ERROR: currval of sequence "my_seq" is not yet defined in this
> > session
>
> > What's happened is that the optimization didn't account for the
> > idea that a SELECT might have a side effect, and if we're going
> > with the "CTEs execute exactly once and (equivalent to) fully,"
> > this is a bug.
>
> The reason it's not a bug is that we have not adopted that position.
> There is a proposal to make it so for wCTEs, but that doesn't mean
> we should change the existing, documented and useful behavior of
> regular CTEs.
The documented and useful behavior is of read-only CTEs, and since
we've decided that CTEs that cause writes are to behave this way,
simply rewording them as function calls from SELECT shouldn't change
this.
> (If you're wondering where it's documented, I cite section 7.8's
> statement that only as much of a CTE query is evaluated as is read
> by the parent query. The limiting case of that is no reference ->
> no rows read.)
We can fix this inconsistency in the case of data-changing SELECTs and
not damage any code. I seriously doubt that people are using the
current behavior as a write fence.
Cheers,
David.
--
David Fetter <david(at)fetter(dot)org> http://fetter.org/
Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter
Skype: davidfetter XMPP: david(dot)fetter(at)gmail(dot)com
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics
Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate
From | Date | Subject | |
---|---|---|---|
Next Message | Jon Nelson | 2010-11-16 15:48:32 | Problem with ALTER TABLE - occasional "tuple concurrently updated" |
Previous Message | Magnus Hagander | 2010-11-16 11:39:35 | Re: Re: [BUGS] BUG #5650: Postgres service showing as stopped when in fact it is running |