Re: BUG #14301: function in case expression called when it should not be
От | David Fetter |
---|---|
Тема | Re: BUG #14301: function in case expression called when it should not be |
Дата | |
Msg-id | 20160829204419.GF29482@fetter.org обсуждение исходный текст |
Ответ на | BUG #14301: function in case expression called when it should not be (rikard@ngs.hr) |
Ответы |
Re: BUG #14301: function in case expression called when it
should not be
|
Список | pgsql-bugs |
On Mon, Aug 29, 2016 at 03:14:33PM +0000, rikard@ngs.hr wrote: > The following bug has been logged on the website: > > Bug reference: 14301 > Logged by: Rikard Pavelic > Email address: rikard@ngs.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 ;( This is the expected behavior. You might look into FILTER clauses in your queries, which might be closer to the behavior you want. Best, 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 Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate
В списке pgsql-bugs по дате отправления: