Re: SRF in SFRM_ValuePerCall mode - Mailing list pgsql-hackers

From Tom Lane
Subject Re: SRF in SFRM_ValuePerCall mode
Date
Msg-id 11972.1209391640@sss.pgh.pa.us
Whole thread Raw
In response to Re: SRF in SFRM_ValuePerCall mode  ("Heikki Linnakangas" <heikki@enterprisedb.com>)
Responses Re: SRF in SFRM_ValuePerCall mode  ("dv @ nabble" <dvnabble@gmail.com>)
List pgsql-hackers
"Heikki Linnakangas" <heikki@enterprisedb.com> writes:
> dv @ nabble wrote:
>> I am working on implementation of custom "C" SRF for our team. The SRF uses
>> SFRM_ValuePerCall mode. I know that sometimes even in SFRM_ValuePerCall 
>> mode
>> all the rows returned from SRF are "materialized" (for performing JOINs, 
>> for
>> example).

> Yep, they are unfortunately always materialized. Back when set returning 
> functions were implemented, the original patch did actually support true 
> "value per call" mode, where the whole result set was not materialized. 
> However, it was dropped because of some issues I can't remember off the 
> top of my head. The value-per-call API was committed, so that it was 
> already in place when someone gets around to implement the backend 
> support for it.

That's a rather revisionist view of history ;-)  Value-per-call mode has
always been there, just not in nodeFunctionscan.c.

If you're not joining to the function result, and you don't need the
ability to determine its result type on the fly, you could declare it
as returning a specific rowtype and then call it in the targetlist:
select vpc();
        regards, tom lane


pgsql-hackers by date:

Previous
From: Magnus Hagander
Date:
Subject: Re: pgstat SRF?
Next
From: Andrew Sullivan
Date:
Subject: Re: we don't have a bugzilla