Sembra che tu voglia probabilmente usare l'interfaccia di programmazione del server (SPI) per implementare una procedura memorizzata come funzione del linguaggio C in esecuzione all'interno del back-end di PostgreSQL.
Usa SPI_connect
per impostare la SPI.
Ora SPI_prepare_cursor
una query, quindi SPI_cursor_open
esso. SPI_cursor_fetch
righe da esso e SPI_cursor_close
quando fatto. Nota che SPI_cursor_fetch
ti consente di recuperare batch di righe.
SPI_finish
per ripulire una volta terminato.
Puoi restituire le righe dei risultati in un tuplestore mentre le generi, evitando la necessità di creare l'intera tabella in memoria. Vedi esempi in una qualsiasi delle funzioni di ritorno di set nel codice sorgente di PostgreSQL. Potresti anche voler dare un'occhiata a SPI_returntuple
funzione di supporto.
Vedi anche:Funzioni del linguaggio C e estendere SQL .
Se la velocità massima è di interesse, il tuo cliente potrebbe voler utilizzare il protocollo binario libpq tramite libpqtypes quindi riceve i dati prodotti dalla procedura di utilizzo della SPI lato server con un sovraccarico minimo.