CREATE LANGUAGE

Nom

CREATE LANGUAGE -- définit un nouveau langage de procédures

Synopsis

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE nom
    HANDLER gestionnaire_appel [
VALIDATOR fonction_validation ]

Description

En utilisant CREATE LANGUAGE, un utilisateur PostgreSQL peut enregistrer un nouveau langage de procédure sur 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 de PostgreSQL pour enregistrer un nouveau langage.

CREATE LANGUAGE associe réellement le nom du langage avec un gestionnaire d'appels qui est responsable de l'exécution des fonctions écrites dans le langage. Référez-vous à Section 33.3 pour plus d'informations sur les gestionnaires d'appels.

Notez que les langages de procédures sont locaux au niveau des bases de données individuelles. Pour rendre disponible un langage dans toutes les bases de données par défaut, il devrait être installé dans la base de données template1.

Paramètres

TRUSTED

TRUSTED spécifie que le gestionnaire d'appels du langage est sûr, c'est-à-dire qu'il n'offre pas de fonctions surpassant les restrictions d'accès aux utilisateurs. Si ce mot clé est omis à l'enregistrement de ce langage, seuls les utilisateurs disposant du droit superutilisateur de PostgreSQL peuvent utiliser ce langage pour créer de nouvelles fonctions.

PROCEDURAL

Aucune influence.

nom

Le nom du nouveau langage de procédures. Le nom du langage n'est pas sensible à la casse. Le nom doit être unique parmi les langages de la base de données.

Pour une compatibilité descendante, le nom doit être entouré par des guillemets simples.

HANDLER gestionnaire_appel

gestionnaire_appels est le nom d'une fonction précédemment enregistrée qui sera appelée pour exécuter les fonctions du langage de procédures. Le gestionnaire d'appels pour un langage de procédures doit être écrit dans un langage compilé comme le C avec la convention d'appel version 1 et enregistré sur PostgreSQL comme une fonction ne prenant aucun argument et retournant le type language_handler, un type spécifiquement utilisé pour identifier la fonction comme gestionnaire d'appels.

VALIDATOR fonction_validation

fonction_validation est le nom d'une fonction précédemment enregistrée qui sera appelée lorsqu'une nouveau fonction sera créée avec ce langage, pour valider la nouvelle fonction. Si aucune fonction de validation n'est spécifiée, alors une nouvelle fonction ne sera pas vérifiée à sa création. La fonction de validation prend un argument de type oid, qui sera l'OID de la fonction à créer, et renverra typiquement void.

Une fonction de validation inspecterait typiquement le corps de la fonction pour s'assurer de la justesse syntaxique mais il regarderait aussi d'autres propriétés de la fonction, par exemple si le langage ne peut pas gérer certains types d'argument. Pour signaler une erreur, la fonction de validation devrait utiliser la fonction ereport(). La valeur de retour de la fonction est ignorée.

Notes

Cette commande ne devrait normalement pas être exécutée directement par les utilisateurs. Pour les langages de procédure fournis dans la distribution PostgreSQL, le programme createlang devrait être utilisé, qui installera aussi le bon gestionnaire d'appels. (createlang appellera CREATE LANGUAGE en interne.)

Dans les versions de PostgreSQL antérieures à la 7.3, il était nécessaire de déclarer les fonctions du gestionnaire comme renvoyant le type opaque, plutôt que language_handler. Pour supporter le chargement des anciens fichiers de sauvegarde, CREATE LANGUAGE acceptera une fonction déclarée renvoyant le type opaque, mais affichera un message d'avertissement et modifié le type renvoyé par la fonction en language_handler.

Utilisez la commande CREATE FUNCTION pour créer une nouvelle fonction.

Utilisez DROP LANGUAGE, ou encore mieux le programme droplang, pour supprimer les langages de procédures.

Le catalogue système pg_language (voir Section 43.18) enregistre des informations sur les langages actuellement installés. De plus, createlang a une option pour lister les langages installés.

La définition d'un langage de procédures ne peut pas être modifiée une fois qu'il a été créé, à l'exception des droits.

Pour être capable d'utiliser un langage de procédures, un utilisateur doit avoir le droit USAGE. Le programme createlang donne automatiquement les droits à toute personne si le langage est « de confiance ».

Exemples

Les deux commandes suivantes exécutées en séquence enregistreront un nouveau langage de procédures et le gestionnaire d'appels associé.

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.

Voir aussi

ALTER LANGUAGE, CREATE FUNCTION, DROP LANGUAGE, GRANT, REVOKE, createlang, droplang