CREATE LANGUAGE

Name

CREATE LANGUAGE -- Définit un nouveau langage procédural.

Synopsis

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE langname
    HANDLER call_handler

Description

En utilisant CREATE LANGUAGE, un utilisateur PostgreSQLpeut enregistrer un nouveau langage procedural avec une base PostgreSQL. En conséquence, les fonctions et procédures déclencheur peuvent être définies dans ce nouveau langage. L'utilisateur doit avoir les droits de superutilisateur PostgreSQL pour enregistrer ce langage.

CREATE LANGUAGE associe effectivement le nom de langage avec le lanceur d'appel qui est responsable de l'exécution des fonctions écrites dans ce langage. Voir le Guide du programmeur pour plus d'information sur les lanceurs d'appel.

Notez que les langages procéduraux sont propres aux bases individuelles. Pour faire un langage disponible pour toutes les bases par défaut, il devrait être installé dans la base template1.

Paramètres

TRUSTED

TRUSTED spécifie que le lanceur d'appel pour le langage est sûr; ainsi, il ne permet pas à un utilisateur non privilégié d'outrepasser les restrictions d'accès. Si ce mot-clé est omis lors de l'enregistrement du langage, seuls les utilisateurs avec les droits de superutilisateur pourront utiliser ce langage pour créer de nouvelles fonctions.

PROCEDURAL

Ceci n'est que du bruit.

langname

Le nom du nouveau langage procédural. Le nom de langage n'est pas sensible à la casse. Un langage procédural ne peut pas outrepasser un des langages natifs de PostgreSQL.

Pour la compatibilité d'arrière-plan, le nom doit être inséré dans des guillemets.

HANDLER call_handler

call_handler est le nom de la fonction antérieurement enregistrée qui sera appelée pour exécuter les fonctions du langage procédural. Le lanceur d'appel pour un langage procédural doit être écrit dans un langage compilé comme le C avec la version 1 de convention d'appel et enregistré dans PostgreSQL comme une fonction ne prenant pas d'arguments et retournant le type opaque, un paramètre fictif pour les types non spécifiés ou non définis.

Diagnostics

CREATE
Message retourné lorsque le langage est créé correctement.
ERROR:  PL handler function funcname() doesn't exist
Erreur retournée si la fonction funcname() n'est pas trouvée.

Notes

Cette commande ne doit pas normalement être exécutée par les utilisateurs. Pour les langages procéduraux fournis dans la distribution PostgreSQL, le script createlang(1) devra être utilisé, lequel installera le lanceur d'appel correct. (createlang appellera CREATE LANGUAGE en interne).

Utilisez la commande CREATE FUNCTIONpour créer une nouvelle fonction.

Utilisez DROP LANGUAGE, ou mieux encore le script droplang(1), pour supprimer les langages procéduraux.

Le catalogue système pg_language enregistre les informations concernant les langages procéduraux installés.

        Table "pg_language"
   Attribute   |  Type   | Modifier
---------------+---------+----------
 lanname       | name    |
 lanispl       | boolean |
 lanpltrusted  | boolean |
 lanplcallfoid | oid     |
 lancompiler   | text    |

   lanname   | lanispl | lanpltrusted | lanplcallfoid | lancompiler
-------------+---------+--------------+---------------+-------------
 internal    | f       | f            |             0 | n/a
 C           | f       | f            |             0 | /bin/cc
 sql         | f       | f            |             0 | postgres

Maintenant, on ne peut plus changer la définition du langage procédural un fois créé.

Exemples

Les deux commandes suivantes exécutées dans la séquence enregistreront un nouveau langage procédural et le lanceur d'appel associé.

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

Compatibilité

CREATE LANGUAGE est une extension PostgreSQL.

Historique

La commande CREATE LANGUAGE est apparue pour la première fois dans la version 6.3 de PostgreSQL.

Voir aussi

createlang(1), CREATE FUNCTION, droplang(1), DROP LANGUAGE, Guide du programmeur POstgreSQL.