Det låter som att du förmodligen vill använda serverprogrammeringsgränssnittet (SPI) att implementera en lagrad procedur som en C-språkfunktion körs i PostgreSQL-backend.
Använd SPI_connect
för att ställa in SPI.
Nu SPI_prepare_cursor
en fråga och sedan SPI_cursor_open
Det. SPI_cursor_fetch
rader från den och SPI_cursor_close
det när det är klart. Observera att SPI_cursor_fetch
låter dig hämta batcher av rader.
SPI_finish
att städa upp när du är klar.
Du kan returnera resultatraderna till en tuplestore när du genererar dem, och undviker behovet av att bygga hela tabellen i minnet. Se exempel i någon av de setreturerande funktionerna i PostgreSQL-källkoden. Du kanske också vill titta på SPI_returntuple
hjälparfunktion.
Se även:C-språkfunktioner och utvidga SQL .
Om maximal hastighet är av intresse kanske din klient vill använda det binära protokollet libpq via libpqtypes så den tar emot data som produceras av din server-side SPI-användande procedur med minimal overhead.