PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 15.9 » Programmation serveur » Interface de programmation serveur

Chapitre 47. Interface de programmation serveur

Table des matières

47.1. Fonctions d'interface
SPI_connect_ext — connecter une fonction C au gestionnaire SPI
SPI_finish — déconnecter une fonction C du gestionnaire SPI
SPI_execute — exécute une commande
SPI_exec — exécute une commande en lecture/écriture
SPI_execute_extended — Exécute une commande avec des paramètres hors ligne
SPI_execute_with_args — exécute une commande avec des paramètres hors ligne
SPI_prepare — prépare une instruction sans l'exécuter tout de suite
SPI_prepare_cursor — prépare une requête, sans l'exécuter pour l'instant
SPI_prepare_extended — prépare une instruction, sans l'exécuter tout de suite
SPI_prepare_params — prépare une requête, mais sans l'exécuter
SPI_getargcount — renvoie le nombre d'arguments nécessaire à une requête par SPI_prepare
SPI_getargtypeid — renvoie l'OID du type de données pour un argument de la requête préparée par SPI_prepare
SPI_is_cursor_plan — renvoie true si la requête préparée par SPI_prepare peut être utilisé avec SPI_cursor_open
SPI_execute_plan — exécute une requête préparée par SPI_prepare
SPI_execute_plan_extended — exécute une requête préparée par SPI_prepare
SPI_execute_plan_with_paramlist — exécute une requête préparée par SPI_prepare
SPI_execp — exécute une requête en mode lecture/écriture
SPI_cursor_open — met en place un curseur en utilisant une requête créée avec SPI_prepare
SPI_cursor_open_with_args — ouvre un curseur en utilisant une requête et des paramètres
SPI_cursor_open_with_paramlist — ouvre un curseur en utilisant les paramètres
SPI_cursor_parse_open — provisionne un curseur en utilisant une requête sous forme chaîne et des paramètres
SPI_cursor_find — recherche un curseur existant par nom
SPI_cursor_fetch — extrait des lignes à partir d'un curseur
SPI_cursor_move — déplace un curseur
SPI_scroll_cursor_fetch — récupère quelques lignes à partir d'un curseur
SPI_scroll_cursor_move — déplacer un curseur
SPI_cursor_close — ferme un curseur
SPI_keepplan — sauvegarde une instruction préparée
SPI_saveplan — sauvegarde une requête préparée
SPI_register_relation — rend une relation nommée éphémère disponible par son nom dans les requêtes SPI
SPI_unregister_relation — supprime une relation nommée éphémère du registre
SPI_register_trigger_data — rends les données de triggers disponibles dans les requêtes SPI
47.2. Fonctions de support d'interface
SPI_fname — détermine le nom de colonne pour le numéro de colonne spécifié
SPI_fnumber — détermine le numéro de colonne pour le nom de colonne spécifiée
SPI_getvalue — renvoie la valeur de chaîne de la colonne spécifiée
SPI_getbinval — retourne la valeur binaire de la colonne spécifiée
SPI_gettype — retourne le nom du type de donnée de la colonne spécifiée
SPI_gettypeid — retourne l'OID de type de donnée de la colonne spécifiée
SPI_getrelname — retourne le nom de la relation spécifiée
SPI_getnspname — renvoie l'espace de noms de la relation spécifiée
SPI_result_code_string — renvoie un code d'erreur sous la forme d'une chaîne de caractères
47.3. Gestion de la mémoire
SPI_palloc — alloue de la mémoire dans le contexte de mémoire courant
SPI_repalloc — ré-alloue de la mémoire dans le contexte de mémoire courant
SPI_pfree — libère de la mémoire dans le contexte de mémoire courant
SPI_copytuple — effectue une copie d'une ligne dans le contexte de mémoire courant
SPI_returntuple — prépare le renvoi d'une ligne en tant que Datum
SPI_modifytuple — crée une ligne en remplaçant les champs sélectionnés d'une ligne donnée
SPI_freetuple — libère une ligne allouée dans le contexte de mémoire courant
SPI_freetuptable — libère une série de lignes créée par SPI_execute ou une fonction semblable
SPI_freeplan — libère une requête préparée sauvegardée auparavant
47.4. Gestion des transactions
SPI_commit — valider la transaction courante
SPI_rollback — annuler la transaction courante
SPI_start_transaction — fonction obsolète
47.5. Visibilité des modifications de données
47.6. Exemples

L'interface de programmation serveur (SPI) donne aux auteurs de fonctions C la capacité de lancer des commandes SQL au sein de leurs fonctions ou procédures. SPI est une série de fonctions d'interface simplifiant l'accès à l'analyseur, au planificateur et au lanceur. SPI fait aussi de la gestion de mémoire.

Note

Les langages procéduraux disponibles donnent plusieurs moyens de lancer des commandes SQL à partir de fonctions. La plupart est basée à partir de SPI. Cette documentation présente donc également un intérêt pour les utilisateurs de ces langages.

Notez que si une commande appelée via SPI échoue, alors le contrôle ne sera pas redonné à votre fonction C. Au contraire, la transaction ou sous-transaction dans laquelle est exécutée votre fonction C sera annulée. (Ceci pourrait être surprenant étant donné que les fonctions SPI ont pour la plupart des conventions documentées de renvoi d'erreur. Ces conventions s'appliquent seulement pour les erreurs détectées à l'intérieur des fonctions SPI.) Il est possible de récupérer le contrôle après une erreur en établissant votre propre sous-transaction englobant les appels SPI qui pourraient échouer.

Les fonctions SPI renvoient un résultat positif en cas de succès (soit par une valeur de retour entière, soit dans la variable globale SPI_result comme décrit ci-dessous). En cas d'erreur, un résultat négatif ou NULL sera retourné.

Les fichiers de code source qui utilisent SPI doivent inclure le fichier d'en-tête executor/spi.h.