PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Obtenir des transactions hautes performances lors de l'extension de PostgreSQL avec des fonctions C

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.