Un langage de procédures doit être « installé » dans toute base
de données amenée à l'utiliser. 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.
CREATE DATABASE
recopie en effet toutes les informations
disponibles dans la base template1
.
Il est ainsi possible pour l'administrateur de définir, par base,
les langages disponibles et d'en rendre certains disponibles
par défaut.
Pour les langages fournis avec la distribution standard, l'installation
dans la base courante se fait simplement par l'exécution de la commande
CREATE EXTENSION
langage
.
La procédure manuelle décrite ci-dessous n'est recommandée que pour
installer des langages qui ne sont pas disponibles sous la forme
d'extensions.
Installation manuelle de langages de procédures
Un langage de procédures s'installe en cinq étapes effectuées
obligatoirement par le superutilisateur des bases de données.
Dans la plupart des cas, les commandes SQL nécessaires doivent être
placées dans un script d'installation d'une « extension »,
pour que la commande CREATE EXTENSION
puisse être
utilisé pour installer le langage.
La bibliothèque partagée du gestionnaire de langage doit être compilée et installée dans le répertoire de bibliothèques approprié. Cela se déroule comme la construction et l'installation de modules de classiques fonctions C utilisateur ; voir la Section 37.10.5. Il arrive souvent que le gestionnaire du langage dépende d'une bibliothèque externe fournissant le moteur de langage ; dans ce cas, elle doit aussi être installée.
Le gestionnaire doit être déclaré par la commande
CREATE FUNCTIONnom_fonction_gestionnaire
() RETURNS gestionnaire_langage AS 'chemin-vers-objet-partagé
' LANGUAGE C STRICT;
Le type de retour spécial gestionnaire_langage
indique au
système que cette fonction ne renvoie pas un type de données SQL et n'est, de ce fait, pas utilisable
directement dans des expressions SQL.
En option, le gestionnaire de langages peut fournir une fonction de gestion « en ligne » qui permet l'exécution de blocs de code anonyme (commandes DO) écrits dans ce langage. Si une fonction de gestion en ligne est fourni par le langage, déclarez-le avec une commande comme
CREATE FUNCTIONnom_fonction_en_ligne
(internal) RETURNS void AS 'chemin-vers-objet-partagé
' LANGUAGE C;
En option, le gestionnaire de langages peut fournir une fonction de
« validation » qui vérifie la définition d'une fonction sans
réellement l'exécuter. La fonction de validation, si elle existe, est
appelée par CREATE FUNCTION
. Si une telle fonction
est fournie par le langage, elle sera déclarée avec une commande de la forme
CREATE FUNCTIONnom_fonction_validation
(oid) RETURNS void AS 'chemin-vers-objet-partagé
' LANGUAGE C;
Le LP doit être déclaré par la commande
CREATE [TRUSTED] LANGUAGEnom_langage
HANDLERnom_fonction_gestionnaire
[INLINEnom_fonction_en_ligne
] [VALIDATORnom_fonction_valideur
] ;
Le mot clé optionnel TRUSTED
(autrement dit, digne de
confiance) indique que le langage n'autorise pas l'accès à des données
normalement inaccessible à cet utilisateur. Les langages de confiance
sont conçus pour les utilisateurs standards de la base de données,
c'est-à-dire ceux qui ne sont pas superutilisateurs, et les autorisent à
créer en tout sécurité des fonctions et des procédures.
Les fonctions en langage de procédures étant exécutées au sein du serveur,
le paramètre TRUSTED
ne devrait être
positionné que pour les langages n'accédant pas aux organes internes
du serveur ou au système de fichiers. Les langages
PL/pgSQL,
PL/Tcl, et
PL/Perl
sont considérés comme dignes de confiance ; les langages
PL/TclU,
PL/PerlU, et
PL/PythonU
sont conçus pour fournir des fonctionnalités illimitées et
ne devraient pas être
marqués dignes de confiance.
L'Exemple 41.1 présente le fonctionnement de la procédure d'installation manuelle du langage PL/Perl.
Exemple 41.1. Installation manuelle de PL/Perl
La commande suivante indique au serveur l'emplacement de la bibliothèque partagée pour la fonction de gestion des appels du langage PL/Perl.
CREATE FUNCTION plperl_call_handler() RETURNS language_handler AS '$libdir/plperl' LANGUAGE C;
PL/Perl a une fonction de gestion en ligne et une fonction de validation, donc nous déclarons aussi celles-ci :
CREATE FUNCTION plperl_inline_handler(internal) RETURNS void AS '$libdir/plperl' LANGUAGE C STRICT; CREATE FUNCTION plperl_validator(oid) RETURNS void AS '$libdir/plperl' LANGUAGE C STRICT;
La commande :
CREATE TRUSTED LANGUAGE plperl HANDLER plperl_call_handler INLINE plperl_inline_handler VALIDATOR plperl_validator;
indique l'évocation des fonctions précédentes pour les fonctions et
procédures lorsque l'attribut de langage est plperl
.
Lors de l'installation par défaut de PostgreSQL, le gestionnaire du langage PL/pgSQL est compilé et installé dans le répertoire des bibliothèques (« lib ») ; de plus, le langage PL/pgSQL est installé dans toutes les bases de données. Si le support de Tcl est configuré, les gestionnaires pour PL/Tcl et PL/TclU sont construits et installés dans le répertoire des bibliothèques mais le langage lui-même n'est pas installé par défaut dans les bases de données. De la même façon, les gestionnaires pour PL/Perl et PL/PerlU sont construits et installés si le support de Perl est configuré et le gestionnaire pour PL/PythonU est installé si le support de Python est configuré mais ces langages ne sont pas installés par défaut.