PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 13.2 » Référence » Commandes SQL » CREATE LANGUAGE

CREATE LANGUAGE

CREATE LANGUAGE — Définir un nouveau langage procédural

Synopsis

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

Description

CREATE LANGUAGE enregistre un nouveau langage procédural à une base de données PostgreSQL. En conséquence, les fonctions et procédures peuvent être définies dans ce nouveau langage.

CREATE LANGUAGE associe en fait le nom du langage à un ou des fonctions de gestion qui sont responsable de l'exécution des fonctions écrites dans le langage. Chapitre 41 offre de plus amples informations sur les gestionnaires de fonctions.

CREATE OR REPLACE LANGUAGE va soit créer un nouveau langage, soit remplacer une définition existante. Si le langage existe déjà, ses paramètres sont mis à jour suivant la commande, mais le propriétaire et les droits ne changent pas, et toutes les fonctions existantes écrite dans ce langage sont supposées être toujours valides.

Un utilisateur doit être un superutilisateur PostgreSQL pour enregistrer un nouveau langage ou modifier les paramètres d'un langage existant. Néanmoins, une fois que le langage est créé, il est possible d'affecter un propriétaire autre qu'un super-utilisateur, qui pourrait le supprimer, modifier ses droits, le renommer ou lui affecter un autre propriétaire. (Néanmoins, n'affectez pas un utilisateur standard comme propriétaire d'une fonction C ; cela créerait un moyen d'escalade de droits pour cet utilisateur.

La syntaxe de CREATE LANGUAGE qui ne fournit pas de fonction de gestion est obsolète. Pour des raisons de compatibilité ascendante avec les anciens fichiers de sauvegarde, c'est interprété comme un CREATE EXTENSION. Ceci fonctionnera si le langage a été préparé sous la forme d'une extension de même nom, ce qui est la façon conventionnelle de configurer les langages de procédures.

Paramètres

TRUSTED

TRUSTED indique que le langage ne donne pas accès aux données auquel l'utilisateur n'a pas normalement 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. 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.

INLINE gestionnaire_en_ligne

gestionnaire_en_ligne est le nom d'une fonction déjà enregistrée qui sera appelée pour exécuter un bloc de code anonyme (voir la commande DO) dans ce langage. Si aucune fonction gestionnaire_en_ligne n'est indiquée, le langage ne supporte pas les blocs de code anonymes. La fonction de gestion doit prendre un argument du type internal, qui sera la représentation interne de la commande DO, et il renverra le type void. La valeur de retour du gestionnaire est ignorée.

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.

Notes

Utiliser DROP LANGUAGE pour supprimer un langage procédural.

Le catalogue système pg_language (voir Section 51.29) contient des informations sur les langages installés. De plus, la commande psql  \dL liste les langages installées.

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.

Exemples

Voici une séquence minimale pour créer un langage de procédures :

CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;
  

Habituellement, cela devrait être écrit dans le script de création de l'extension, et les utilisateurs feraient ceci pour installer l'extension :

CREATE EXTENSION plsample;
  

Compatibilité

CREATE LANGUAGE est une extension de PostgreSQL.