Abhijit Menon-Sen wrote:

Hi.

I've been working on making it possible for PL/Perl users to fetch large
result sets one row at a time (the current spi_exec_query interface just
returns a big hash).

The idea is to have spi_query call SPI_prepare/SPI_open_cursor, and have
an spi_fetchrow that calls SPI_cursor_fetch. It works well enough, but I
don't know how to reproduce spi_exec_query's error handling (it runs the
SPI_execute in a subtransaction).

To do something similar, I would have to create a WITH HOLD cursor in my
spi_query function. But SPI_cursor_open provides no way to do this, and
it calls PortalStart before I can set CURSOR_OPT_HOLD myself.

Suggestions?



Abhijit,

Thinking and reading about this some more, I think we should not try to mimic the error handling of the existing mechanism. Let's just provide a separate API using SPI_prepare/SPI_open_cursor/SPI_cursor_fetch, and leave the current mechanism in place - it's useful enough on small resultsets.

Does that make sense? If so, can you do that, or give me what you have and let me bang on it?

cheers

andrew

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
      choose an index scan if your joining column's datatypes do not
      match

Reply via email to