Chapitre 36. Langages de procédures

PostgreSQL permet aux utilisateurs d'ajouter des langages de programmation utilisables pour l'écriture de fonctions et de procédures. Ils sont appelés langages de procédures (LP). Dans le cas d'une procédure fonction ou déclencheur écrite dans un langage de procédures, le serveur de bases de données n'a aucune connaissance en interne de la façon d'interpréter le texte du source de la fonction. À la place, la tâche est passée à un gestionnaire spécial qui connaît les détails du langage. Le gestionnaire peut soit faire tout le travail de découpage, d'analyse syntaxique, d'exécution, etc. par lui-même, soit servir de << colle >> entre PostgreSQL et une implémentation existante d'un langage de programmation. Le gestionnaire lui-même est une fonction en langage C compilée dans une bibliothèque partagée et chargée à la demande.

Écrire un gestionnaire pour un nouveau langage de procédures est décrit dans le Chapitre 47. Plusieurs langages de procédures sont disponibles dans la distribution PostgreSQL standard, qui peuvent servir d'exemples.

36.1. Installation de langages de procédures

Un langage de procédures doit être << installé >> dans chaque base de données où il est destiné à être utilisé. Mais les langages de procédures installés dans la base de données template1 sont automatiquement disponibles dans toutes les bases de données créées par la suite. Ainsi, l'administrateur de bases de données peut décider quels langages sont disponibles dans quelles bases de données et peut rendre certains langages disponibles par défaut s'il le choisit.

Pour les langages fournis avec la distribution standard, le programme createlang peut être utilisé pour installer le langage au lieu de reporter tous les détails à la main. Par exemple, pour installer le langage PL/pgSQL dans la base de données template1, utilisez

createlang plpgsql template1

La procédure manuelle décrite ci-dessous n'est recommandée que pour installer des langages personnalisés que createlang ne connaît pas.

Installation manuelle de langages de procédures

Un langage de procédures s'installe dans une base de données en trois étapes, qui doivent être effectuées par le superutilisateur de bases de données. Le programme createlang automatise l'étape 2 et l'étape 3.

  1. La bibliothèque partagée pour le gestionnaire de langage doit être compilée et installée dans le répertoire de bibliothèques approprié. Ceci fonctionne comme la construction et l'installation de modules à l'aide de fonctions C classiques définies par un utilisateur ; voir la Section 33.7.6.

  2. Le gestionnaire doit être déclaré par la commande

    CREATE FUNCTION nom_fonction()
        RETURNS langage
        AS 'chemin-vers-objet-partagé'
        LANGUAGE C;

    Le type de retour spécial de langage indique au système de bases de données que cette fonction ne renvoie pas l'un des types de données SQL et n'est pas utilisable directement dans des expressions SQL.

  3. Le LP doit être déclaré par la commande

    CREATE [TRUSTED] [PROCEDURAL] LANGUAGE
    nom-langage
        HANDLER nom-fonction;

    Le mot clé optionnel TRUSTED indique que les utilisateurs ordinaires n'ayant pas de droits de super-utilisateur devraient être autorisés à utiliser ce langage pour créer des procédures fonctions et déclencheurs. Les fonctions LP étant exécutées au sein du serveur de bases de données, le paramètre TRUSTED ne devrait être positionné que pour les langages n'accédant pas aux organes internes du serveur de bases ou du système de fichiers. Les langages PL/pgSQL, PL/Tcl, et PL/Perl sont considérés comme dignes de confiances ; les langages PL/TclU, PL/PerlU, et PL/PythonU sont conçus pour ne fournir que des fonctionnalités limitées et ne devraient pas être considérées dignes de confiance.

L'Exemple 36-1 montre comment fonctionne la procédure d'installation manuelle avec le langage PL/pgSQL.

Exemple 36-1. Installation manuelle de PL/pgSQL

La commande suivante indique au serveur de bases de données l'emplacement de la bibliothèque partagée pour la fonction de gestion des appels du langage PL/pgSQL.

CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler AS 
    '$libdir/plpgsql' LANGUAGE C;

La commande

CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql
    HANDLER plpgsql_call_handler;

définit alors que la fonction déclarée précédemment de gestion des appels devrait être invoquée pour les procédures fonctions ou déclencheurs pour lesquelles l'attribut langage est plpgsql.

Lors de l'installation par défaut de PostgreSQL, le gestionnaire pour le langage PL/pgSQL est compilé et installé dans le répertoire des bibliothèques (<< lib >>). Si le support de Tcl/Tk y est configuré, les gestionnaires pour PL/Tcl et PL/TclU sont aussi compilés et installés au même endroit. De même, les gestionnaires de PL/Perl et PL/PerlU sont compilés et installés si le support de Perl est configuré, et PL/PythonU est installé si le support de Python est configuré.