Re: extra function calls from query returning composite type

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: extra function calls from query returning composite type
Дата
Msg-id 6792.1419868489@sss.pgh.pa.us
обсуждение исходный текст
Ответ на extra function calls from query returning composite type  (Ronald Peterson <ron@hub.yellowbank.com>)
Ответы Re: extra function calls from query returning composite type  (Ronald Peterson <ron@hub.yellowbank.com>)
Список pgsql-general
Ronald Peterson <ron@hub.yellowbank.com> writes:
> I added a 'raise notice' to a plpgsql function I was working on
> recently, and noticed that my notification was being raised more often
> than I expected.  The notification is raised in a function ('getone'
> in my example below) that returns a single composite value.  This
> function is then called by another function ('getset') that returns a
> setof that composite value.  It appears that 'getone' is called once
> for each column of my composite type.  I whittled this down to the
> following example.

> I get the expected result from my query, but I don't understand (what
> appear to be) the extra function calls.

This:

>     SELECT (getone(id)).*

is implemented as SELECT (getone(id)).foo, (getone(id)).bar

If you're using 9.3 or later you could avoid that by recasting the
call as LATERAL, ie

  SELECT go.*
    FROM dat, LATERAL getone(id) AS go
    WHERE set = setid;

            regards, tom lane


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

Предыдущее
От: David G Johnston
Дата:
Сообщение: Re: extra function calls from query returning composite type
Следующее
От: David Johnston
Дата:
Сообщение: Re: Rollback on include error in psql