Re: join between a table and function.

Поиск
Список
Период
Сортировка
Искать
От
David Johnston
Тема
Re: join between a table and function.
Дата
Msg-id
B9A04DA6-BE27-46B0-BAED-99E22AE1AB90@yahoo.com
Ответ на
Список
Дерево обсуждения
join between a table and function. Lauri Kajan <lauri.kajan@gmail.com>
Re: join between a table and function. Chetan Suttraway <chetan.suttraway@enterprisedb.com>
Re: join between a table and function. Lauri Kajan <lauri.kajan@gmail.com>
Re: join between a table and function. "David Johnston" <polobo@yahoo.com>
On Aug 16, 2011, at 14:29, Merlin Moncure  wrote:

> On Tue, Aug 16, 2011 at 8:33 AM, Harald Fuchs  wrote:
>> In article ,
>> Lauri Kajan  writes:
>> 
>>> I have also tried:
>>> select
>>> *, getAttributes(a.id)
>>> from
>>>   myTable a
>> 
>>> That works almost. I'll get all the fields from myTable, but only a
>>> one field from my function type of attributes.
>>> myTable.id | myTable.name | getAttributes
>>> integer      | character        | attributes
>>> 123           | "record name" | (10,20)
>> 
>>> What is the right way of doing this?
>> 
>> If you want the attributes parts in extra columns, use
>> 
>> SELECT *, (getAttributes(a.id)).* FROM myTable a
> 
> This is not generally a good way to go.  If the function is volatile,
> you will generate many more function calls than you were expecting (at
> minimum one per column per row).  The best way to do this IMO is the
> CTE method (as david jnoted) or, if and when we get it, 'LATERAL'.
> 

From your statement is it correct to infer that a function defined as "stable" does not exhibit this effect?  More specifically would the function only be evaluated once for each set of distinct parameters and the resulting records(s) implicitly cached just like the CTE does explicitly?

David J.
В списке pgsql-general по дате отправления
От: Chris Travers
Дата:
От: Siva Palanisamy
Дата:
FAQ