Am 08.05.2018 um 16:18 schrieb David G. Johnston 
<david.g.johns...@gmail.com<mailto:david.g.johns...@gmail.com>>:

On Tue, May 8, 2018 at 6:36 AM, Adrian Klaver 
<adrian.kla...@aklaver.com<mailto:adrian.kla...@aklaver.com>> wrote:

select * from vectorize('myvec');
fetch all from myvec;

Can you explain me, which part is wrong?

I am going to say:

perform pivottable( ...

https://www.postgresql.org/docs/10/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-NORESULT

"Sometimes it is useful to evaluate an expression or SELECT query but discard 
the result, for example when calling a function that has side-effects but no 
useful result value. To do this in PL/pgSQL, use the PERFORM statement:

PERFORM query;

This executes query and discards the result.  ..."
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

​It discards the results but not the side-effect, which in this case is 
creating a named portal in the session.  While the name of the portal, as 
returned by the function, is indeed lost the portal still exists, with the same 
name, and since the name is known by the caller anyway the attempt to make use 
of the portal succeeds (no failure and the column structure is known).  Maybe 
you are right about the contents of the portal being lost due to the perform 
but that behavior isn't evident from the the section you quote.

Thanks you both for this hint with the „discard“ :-)
I have modified my pivot-table function so that it returns the cursor directly, 
see my Gist: https://gist.github.com/flashpixx/66fb3dcd557cc9e93eb22ba692085622
After the pivot-function is run I can fetch all the cursor data.

Phil

Reply via email to