Persistent data across SETOF calls - Mailing list pgsql-hackers

From Ed Behn
Subject Persistent data across SETOF calls
Date
Msg-id CAJBL5DNPYDw84qDohS5CMXOLESsozV7QNJ6NwS1M66+tvHmzdw@mail.gmail.com
Whole thread
Responses Re: Persistent data across SETOF calls
List pgsql-hackers
Good day-
    I maintain the PL/Haskell language handler. Typically, the handler compiles function code and stores the compiled data in the fn_extra field of FmgrInfo. The fn_extra field persists from one call to the next within a query meaning the expensive compilation only needs to happen once per query. 

    However, when calling a set-returning function multiple times in a query, there appears to be no way to carry data from one set to another. This is because the fn_extra field stores the FuncCallContext structure. While the user_fctx field of the FuncCallContext structure persists from one call to the next, it is NULLed out at the end of a set. 

    For example, if there is a table, t, with a column, i, and a set-returning function, func, the following query is very inefficient:

    SELECT *
    FROM t, func(i)

This is because the function is recompiled for each row of t. 

Is there a way around this? Ideally, there would be a field that persists from one set to another within a query. 

Thank you for any help you can provide. 
              -Ed

pgsql-hackers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: pg_waldump: support decoding of WAL inside tarfile
Next
From: Henson Choi
Date:
Subject: Re: Row pattern recognition