sql >> Databasteknik >  >> RDS >> PostgreSQL

Att uppnå högpresterande transaktioner när PostgreSQL utökas med C-funktioner

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.




  1. Hur man formaterar siffror i PostgreSQL

  2. Är det möjligt att beskriva en tabell och visa NOTNULL-kolumnerna först?

  3. Varför får jag Ora-30004 när sys_connect_by_path-avgränsaren inte finns i kolumnvärden

  4. Filtrera django-frågan efter unicode-tecken 🐲 eller 💎 etc