Bruce Momjian wrote:
Jeff Davis wrote:in section _37.7.1.2. RETURN NEXT_ of the docs, it says that "PL/pgSQL
stores the entire result set before returning from the function".
Is the same true for C, and if so, should we document it in
_33.7.9. Returning Sets from C-Language Functions_ ?
It could be important if someone wanted to return a huge amount of data
from an SRF and it was larger than available RAM.
I would assume the C function guys would know this was obvious.
Actually, the situation is a bit more complicated. The section Jeff is
referring to is the one-row-at-a-time (SFRM_ValuePerC all) api that in
theory should not have to suffer from the mentioned limitation in
PL/pgSQL (which uses SFRM_Materializ e).
However, the one-row-at-a-time ends up being accumulated into a
tuplestore by ExecMakeTableFu nctionResult() anyway, effectively making
SFRM_ValuePerCa ll look just like SFRM_Materializ e, so the memeory
efficiency benefit from SFRM_ValuePerCa ll is lost :-(
We had talked about supporting both modes, and it has always been on my
long-term personal TODO to go back and address this. But since the
release of 7.3 I have yet to hear a single real life case where the
current SFRM_Materializ e mode has been a problem, so fixing this has
stayed low on my list.
Joe
---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faqs/FAQ.html