Re: Function returning 2 columns evaluated twice when both columns are needed
От
Merlin Moncure
Тема
Re: Function returning 2 columns evaluated twice when both
columns are needed
Дата
Msg-id
b42b73150910201712x4b6ce6ccsb79870e4c6cfad15@mail.gmail.com
Ответ на
Список
Дерево обсуждения
Function returning 2 columns evaluated twice when both columns are
needed Gerhard Wiesinger <lists@wiesinger.com>
Re: Function returning 2 columns evaluated twice when both columns are needed Tom Lane <tgl@sss.pgh.pa.us>
Re: Function returning 2 columns evaluated twice when both
columns are needed Gerhard Wiesinger <lists@wiesinger.com>
Re: Function returning 2 columns evaluated twice when both columns are needed Tom Lane <tgl@sss.pgh.pa.us>
Re: Function returning 2 columns evaluated twice when both
columns are needed Gerhard Wiesinger <lists@wiesinger.com>
Re: Function returning 2 columns evaluated twice when both columns are needed Tom Lane <tgl@sss.pgh.pa.us>
Re: Function returning 2 columns evaluated twice when both
columns are needed Pavel Stehule <pavel.stehule@gmail.com>
Re: Function returning 2 columns evaluated twice when both
columns are needed Merlin Moncure <mmoncure@gmail.com>
Re: Function returning 2 columns evaluated twice when both
columns are needed Pavel Stehule <pavel.stehule@gmail.com>
Re: Function returning 2 columns evaluated twice when both
columns are needed Merlin Moncure <mmoncure@gmail.com>
Re: Function returning 2 columns evaluated twice when both columns are needed Christophe Pettus <xof@thebuild.com>
On Tue, Oct 20, 2009 at 5:12 PM, Pavel Stehule wrote: >> [ shrug... ] There are other possible reasons why the planner would >> fail to flatten a subquery, but none of them apply to the example you >> showed. And your example function *was* VOLATILE, by default. > > I checked this on 8.5 and function is evaluated more time although is immutable. > > postgres=# create or replace function foo(out a int, out b int) > returns record as $$ > begin > raise notice 'start foo'; > a := 10; b := 20; > return; > end; > $$ language plpgsql immutable; > CREATE FUNCTION > > postgres=# select (foo()).*; This is because select (func()).* is expanded to mean: select func(f1), func(f2) ... func(fn); This is a general issue with '*' because in postgres it means: 'evaluate me for each field of me', not 'return all fields of me'. I don't think our behavior in this regard is correct (afaict i'm in the minority though). merlin
В списке pgsql-general по дате отправления
От: Pavel Stehule
Дата: