CREATE LANGUAGE
CREATE LANGUAGE — Définir un nouveau langage procédural
Synopsis
CREATE [ PROCEDURAL ] LANGUAGE nom
CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE nom
HANDLER gestionnaire_appel [ VALIDATOR fonction_validation ]
Description
Par l'utilisation de
CREATE
LANGUAGE
, un utilisateur de PostgreSQL™ peut associer un nouveau
langage procédural à une base de données PostgreSQL™. En conséquence, les
fonctions et les procédures de déclencheurs peuvent être définies
dans ce nouveau langage. L'utilisateur doit avoir les droits de
superutilisateur pour enregistrer un nouveau langage.
CREATE LANGUAGE
associe en fait le nom du langage à un gestionnaire d'appels
responsable de l'exécution des fonctions écrites dans le langage.
Chapitre 36,
Langages de procédures offre de plus amples informations sur
les gestionnaires d'appels.
La commande
CREATE
LANGUAGE
existe sous deux formes. Dans la première,
l'utilisateur ne fournit que le nom du langage désiré et le serveur
PostgreSQL™ consulte le
catalogue système
pg_pltemplate
pour déterminer les
paramètres adéquats. Dans la seconde, l'utilisateur fournit les
paramètres du langage avec son nom. Cette forme peut être utilisée
pour créer un langage non défini dans pg_pltemplate. Cette approche est cependant
obsolète.
Si le serveur trouve une entrée dans le catalogue pg_pltemplate pour le nom donné, il utilise les
données du catalogue quand bien même la commande incluerait les
paramètres du langage. Ce comportement simplifie le chargement des
anciens fichiers de sauvegarde ; ceux-ci présentent le risque de
contenir des informations caduques sur les fonctions de support du
langage.
Paramètres
-
TRUSTED
-
Le gestionnaire d'appels du langage est déclaré sûr,
c'est-à-dire qu'il n'offre pas à un utilisateur sans
privilège la possibilité d'outrepasser les restrictions
d'accès. Si ce mot clé est omis à l'enregistrement du
langage, seuls les superutilisateurs peuvent utiliser ce
langage pour créer de nouvelles fonctions.
-
PROCEDURAL
-
Sans objet.
-
nom
-
Le nom du nouveau langage procédural, insensible à la casse.
Il ne peut y avoir deux langages portant le même nom au sein
de la base de données.
Pour des raisons de compatibilité descendante, le nom doit
être entouré de guillemets simples.
-
HANDLER
gestionnaire_appel
-
gestionnaire_appel
est
le nom d'une fonction précédemment enregistrée. C'est elle
qui est appelée pour exécuter les fonctions du langage
procédural. Le gestionnaire d'appels d'un langage procédural
doit être écrit dans un langage compilé, tel que le C, avec
la convention d'appel version 1 et enregistré dans
PostgreSQL™ comme une
fonction ne prenant aucun argument et retournant le type
language_handler, type servant
essentiellement à identifier la fonction comme gestionnaire
d'appels.
-
VALIDATOR
fonction_validation
-
fonction_validation
est
le nom d'une fonction précédemment enregistrée. C'est elle
qui est appelée pour valider toute nouvelle fonction écrite
dans ce langage. Si aucune fonction de validation n'est
spécifiée, alors toute nouvelle fonction n'est pas vérifiée à
sa création. La fonction de validation prend obligatoirement
un argument de type oid, OID de la
fonction à créer, et renvoie par convention void.
Une fonction de validation contrôle généralement le corps de
la fonction pour s'assurer de sa justesse syntaxique mais
peut également vérifier d'autres propriétés de la fonction
(l'incapacité du langage à gérer certains types d'argument,
par exemple). Le signalement d'erreur se fait à l'aide de la
fonction ereport(). La valeur de
retour de la fonction est ignorée.
L'option TRUSTED et le(s) nom(s) de la
fonction de support sont ignorés s'il existe une entrée dans la
table pg_pltemplate pour le nom du
langage spécifié.
Notes
Le programme
createlang(1) est un simple enrobage de la
commande
CREATE
LANGUAGE
. Il facilite l'installation des langages
procéduraux à partir de la ligne de commande du shell.
DROP LANGUAGE, ou mieux, le programme
droplang(1) sont utilisés pour supprimer des
langages procéduraux.
Le catalogue système pg_language (voir
Section 43.20, « pg_language ») contient des
informations sur les langages installés. De plus,
createlang
dispose d'une option
pour lister ces langages.
Pour créer des fonctions dans un langage procédural, l'utilisateur
doit posséder le droit USAGE pour ce
langage. Par défaut, USAGE est donné à
PUBLIC (c'est-à-dire tout le monde) pour
les langages de confiance. Ce droit peut être révoqué si
nécessaire.
Les langages procéduraux sont installées par base. Néanmoins, un
langage peut être installé dans la base de données template1, ce qui le rend automatiquement disponible
dans toutes les bases de données créées par la suite.
Le gestionnaire d'appels et la fonction de validation (s'il y en a
une) doivent exister préalablement si le serveur ne possède pas
d'entrée pour ce langage dans pg_pltemplate. Dans le cas contraire, les
fonctions n'ont pas besoin de pré-exister ; elles sont
automatiquement définies si elles ne sont pas présentes dans la
base de données. (Cela peut amener
CREATE LANGUAGE
à échouer si la
bibliothèque partagée implémentant le langage n'est pas disponible
dans l'installation.)
Dans les versions de PostgreSQL™ antérieures à 7.3, il était
nécessaire de déclarer des fonctions de gestion renvoyant le type
opaque, plutôt que language_handler. Pour accepter le chargement
d'anciens fichiers de sauvegarde,
CREATE LANGUAGE
accepte toute
fonction retournant le type opaque mais
affiche un message d'avertissement et modifie le type de retour de
la fonction en language_handler.
Exemples
Tout langage procédural standard sera préférentiellement créé ainsi
:
CREATE LANGUAGE plpgsql;
Pour un langage inconnu du catalogue pg_pltemplate, une séquence comme celle-ci est
nécessaire :
CREATE FUNCTION plsample_call_handler() RETURNS language_handler
AS '$libdir/plsample'
LANGUAGE C;
CREATE LANGUAGE plsample
HANDLER plsample_call_handler;
Compatibilité
CREATE LANGUAGE
est
un extension de PostgreSQL™.