Re: Weird behaviour - Mailing list pgsql-hackers

From Tom Lane
Subject Re: Weird behaviour
Date
Msg-id 628.1331737344@sss.pgh.pa.us
Whole thread Raw
In response to Weird behaviour  (Vlad Arkhipov <arhipov@dc.baikal.ru>)
List pgsql-hackers
Vlad Arkhipov <arhipov@dc.baikal.ru> writes:
> Could anyone please explain the behaviour of Postgres in the cases 
> below?

I think it has something to do with anytextcat() being mistakenly marked
as volatile, thus preventing flattening of the subquery in the cases
where you don't explicitly coerce the integer to text.  When the
subquery does get flattened, that results in discarding the troublesome
expression as being unreferenced, so no error.  HEAD doesn't throw the
error for either case, thanks to commit
3db6524fe63f0598dcb2b307bb422bc126f2b15d.

> It evaluates an unused expression t.x || t.y in the first case 
> but doesn't do it in the second one. It's also strange that the last 
> explain throws an error.

I think your expectations need adjustment: what is strange is not
getting the error, but failing to get it.  In general the planner
assumes that it can freely evaluate immutable functions, and so this
query typically *will* throw an error during constant-simplification.
In some of these phrasings you manage to avoid that because the
expression is discarded as unreferenced before const-simplification
gets run, but that's an implementation artifact that should not
be relied on.
        regards, tom lane


pgsql-hackers by date:

Previous
From: David Fetter
Date:
Subject: Re: VALID UNTIL
Next
From: Kohei KaiGai
Date:
Subject: Re: [v9.2] Add GUC sepgsql.client_label