BUG #14301: function in case expression called when it should not be

From: rikard(at)ngs(dot)hr
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #14301: function in case expression called when it should not be
Date: 2016-08-29 15:14:33
Message-ID: 20160829151433.15676.91530@wrigleys.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

The following bug has been logged on the website:

Bug reference: 14301
Logged by: Rikard Pavelic
Email address: rikard(at)ngs(dot)hr
PostgreSQL version: 9.4.9
Operating system: CentOS
Description:

I was investigating some performance issues and stumbled upon this
behavior:

create function slowFunction() returns int as $$
begin
raise notice 'called';
return 0;
end;
$$ language plpgsql volatile;

create table something (i int, doSlow boolean);
insert into something values(1, false),(2,false);

select case when doSlow then sum(slowFunction()) else sum(1) end as total
from something group by doSlow

Postgres will correctly evaluate the last query, but it will also call the
plpgsql volatile function.

Luckly for us, this was read only function, but Postgres will happily
execute DML commands inside it ;(

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2016-08-29 15:28:34 Re: BUG #14301: function in case expression called when it should not be
Previous Message a 2016-08-29 14:09:12 BUG #14300: Empty cube representation