Re: [BUGS] Multiple evaluation of single reference to function without parameters

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: [BUGS] Multiple evaluation of single reference to function without parameters
Дата
Msg-id CAKFQuwbVgaqAwKoKW1VgfAOrRsbXH8e3F8KCEFUsFrFoUA0Kmg@mail.gmail.com
обсуждение исходный текст
Ответ на [BUGS] Multiple evaluation of single reference to function with out parameters  (Joel Hoffman <joel.hoffman@gmail.com>)
Ответы Re: [BUGS] Multiple evaluation of single reference to function without parameters  (Joel Hoffman <joel.hoffman@gmail.com>)
Список pgsql-bugs
On Friday, September 22, 2017, Joel Hoffman <joel.hoffman@gmail.com> wrote:
If I create a function with more than one out parameter, and then refer to it inside parentheses as a record, e.g. select (function()).*, the function appears to be evaluated multiple times, once for every column returned. This seems to be true regardless of whether it's defined as volatile or immutable.

... 
As far as I can tell, this behavior has been the same since at least version 8.2 and up through 10 beta 4, but I can't find any references to it and it seems very surprising. It could certainly cause unexpected results if the function has side effects. Is this a bug?


It is not a bug or likely to be fixed.  LATERAL makes the need for function invocation in the manner you describe nearly unnecessary and you can use OFFSET 0 in other cases to put the function call in a subquery and place the (composite).* expressionin the upper-level.

There is a cautionary note somewhere in docs about this.  It is a parser byproduct.  The star gets expanded at parse time to individual and independent column names.  What happens is exactly what you'd expect if you tried to write the query without resorting to using ".*"

David J.

В списке pgsql-bugs по дате отправления:

Предыдущее
От: Joel Hoffman
Дата:
Сообщение: [BUGS] Multiple evaluation of single reference to function with out parameters
Следующее
От: Andrew Dunstan
Дата:
Сообщение: Re: [BUGS] BUG #14825: enum type: unsafe use?