Weird behaviour - Mailing list pgsql-hackers

From Vlad Arkhipov
Subject Weird behaviour
Date
Msg-id 4F608016.4020109@dc.baikal.ru
Whole thread Raw
Responses Re: Weird behaviour  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Could anyone please explain the behaviour of Postgres in the cases 
below? 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.

postgres=# select version();                                                    version
---------------------------------------------------------------------------------------------------------------
PostgreSQL9.1.2 on x86_64-unknown-linux-gnu, compiled by gcc (GCC) 
 
4.1.2 20080704 (Red Hat 4.1.2-51), 64-bit
(1 row)

postgres=# create or replace function f()
postgres-# returns text as $$
postgres$# begin
postgres$#   raise exception 'here';
postgres$# end;
postgres$# $$ language plpgsql immutable;

postgres=# select t.x
postgres-# from (
postgres(#   select t.x, t.x || f()
postgres(#   from (values(1)) as t(x)
postgres(# ) t;
ERROR:  here

postgres=# select t.x
postgres-# from (
postgres(#   select t.x, t.x::text || f()
postgres(#   from (values(1)) as t(x)
postgres(# ) t; x
--- 1
(1 row)

postgres=# explain select t.x
postgres-# from (
postgres(#   select t.x, t.x || f()
postgres(#   from (values(1)) as t(x)
postgres(# ) t;
ERROR:  here


pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: initdb and fsync
Next
From: David Fetter
Date:
Subject: Re: CREATE FOREGIN TABLE LACUNA