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 ;(
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 |