Re: record from plpgsql function performance

Поиск
Список
Период
Сортировка
От David G. Johnston
Тема Re: record from plpgsql function performance
Дата
Msg-id CAKFQuwYEy+oQ_wGPt6H8TPW2r2y6n7KR=EiaWbSMdB=Ohkb2Rg@mail.gmail.com
обсуждение исходный текст
Ответ на record from plpgsql function performance  (Alexander Shereshevsky <shereshevsky@gmail.com>)
Ответы Re: record from plpgsql function performance  (Alexander Shereshevsky <shereshevsky@gmail.com>)
Список pgsql-general
On Thursday, July 2, 2015, Alexander Shereshevsky <shereshevsky@gmail.com> wrote:
Hello,

I have some simple function. The returned data set is generated based on view (dynamic - can be changed on daily basis). 
So the function was defined this way:

 1. returns setof some_view as ...
 2. inside the function I'm generating dynamic SQL into v_sql variable.
 3. return query execute v_sql

Everything works fine if I'm running single function, like:
select * from function (param1, param2)
I'm getting the delimited fields in desired order.

But if I want to run the function in inline mode, like:
select function(param1, param2) from some_table;
so the returned datatype is record.

To return multiple fields, I'm trying to use:
select (function(param1, param2)).* from some_table;
But this operation has a huge performance impact, IMHO runtime multiplied by number of columns - the function is executed for each column separately. 
In my case normal inline run is about 2 seconds for 300-400 records, but with ().* it's increased to 90-120 seconds.

Thank you in advance if you can suggest me the better way.

BR,
Alexander Shereshevsky 

Use LATERAL.

If that is not an option you place the unexpanded function call in a CTE (with) and the expand it within the main query.

With funccall as ( select func(arg) from tbl )
Select (func).* from funccall;

Because, yes the function is called once for each column due to the star expansion.  You have to keep the result as a composite type during function execution and then expand the composite type.

David J.

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

Предыдущее
От: Alexander Shereshevsky
Дата:
Сообщение: record from plpgsql function performance
Следующее
От: Joseph Kregloh
Дата:
Сообщение: Re: Running PostgreSQL with ZFS ZIL