Il semble que vous souhaitiez probablement utiliser l'interface de programmation serveur (SPI) pour implémenter une procédure stockée en tant que fonction en langage C s'exécutant à l'intérieur du back-end PostgreSQL.
Utilisez SPI_connect
pour configurer le SPI.
Maintenant SPI_prepare_cursor
une requête, puis SPI_cursor_open
ce. SPI_cursor_fetch
lignes de celui-ci et SPI_cursor_close
quand c'est fait. Notez que SPI_cursor_fetch
vous permet de récupérer des lots de lignes.
SPI_finish
à nettoyer une fois terminé.
Vous pouvez renvoyer les lignes de résultat dans un tuplestore au fur et à mesure que vous les générez, évitant ainsi d'avoir à créer toute la table en mémoire. Voir des exemples dans l'une des fonctions de retour d'ensemble dans le code source PostgreSQL. Vous pouvez également consulter le SPI_returntuple
fonction d'assistance.
Voir aussi :Fonctions du langage C et étendre SQL .
Si la vitesse maximale est intéressante, votre client peut vouloir utiliser le protocole binaire libpq via libpqtypes afin qu'il reçoive les données produites par votre procédure utilisant SPI côté serveur avec une surcharge minimale.