CREATE FUNCTION

Nom

CREATE FUNCTION — définit une nouvelle fonction
CREATE FUNCTION name ( [ ftype [, ...] ] )
    RETURNS rtype
    AS definition
    LANGUAGE 'langname'
  

Entrées

name

nom de la fonction a créer

ftype

type des arguments de la fonction

rtype

retour type

definition

Une chaîne définissant la fonction; les moyens dépendent du langage. Ce peut être un nom de fonction interne, le chemin vers un fichier objet, une requête SQL, ou texte en langage procédural.

langname

peut être 'C', 'sql', 'internal' ou 'plname', où 'plname' est le nom d'un langage procédural créé. Voir CREATE LANGUAGE pour les détails.

Sorties

CREATE

si la commande s'est faite correctement.

Description

CREATE FUNCTION permet à l'utilisateur Postgres d'enregistrer une fonction avec une base. Cet utilisateur est considéré comme le propriétaire de la fonction.

Notes

Voir le chapitre sur les fonctions dans le Guide du programmeur PostgreSQL pour plus d'information.

Utilisez DROP FUNCTION pour supprimer les fonctions utilisateur.

Postgres admet la fonction "redéfinition"; le même nom peut être utilisé pour différentes fonctions tant qu'elles ont des types arguments dictincts. Cependant, cette possibilité doit être utilisée avec précaution pour les fonctions INTERNAL et les fonctions en langage C.

Deux fonctions INTERNAL ne peuvent pas avoir le même nom en C sans provoquer d'erreur au moment de l'édition de liens. Pour éviter ça, donnez leur différents noms C (par exemple, utilisez les types arguments comme dans une partie du nom C), quand vous spécifiez ces noms dans la clause AS de CREATE FUNCTION. Si la clause AS est laissée vide CREATE FUNCTION suppose que le nom C de la fonction est le même que le nom SQL.

Pour les fonctions C chargées dynamiquement, le nom SQL de la fonction doit être le même que le nom de la fonction C, parce que la clause AS est utilisée pour donner le nom de chemin du fichier objet contenant le code C. Dans ces conditions il vaut mieux ne pas essayer de redéfinir les noms de fonction SQL. Ceci peut conduire a charger unefonction C ayant le même nom C qu'une fonction interne ou autre fonction chargée dynamiquement. Sur certaines plate-formes le chargeur dynamique peut saboter le lancement s'il y a un conflit de noms de fonctions C. Ainsi, même si ça fonctionne pour vous aujourd'hui, vous regretterez la redéfinition des noms plus tard quand vous essairez d'exécuter le code.

Usage

Pour créer une fonction SQL simple :
CREATE FUNCTION one() RETURNS int4
    AS 'SELECT 1 AS RESULT'
    LANGUAGE 'sql';
SELECT one() AS answer;

       answer 
    ------
    1
   
  

Pour créer une fonction C, appelant une routine depuis une bibliothèque utilisateur partagée. Cette routine particulière calcule une vérification numérique et retourne TRUE si la vérification numérique dans les paramètres de la fonction est correct. L'utilisation d'une contrainte CHECK est attendue.

   CREATE FUNCTION ean_checkdigit(bpchar, bpchar) RETURNS bool
    AS '/usr1/proj/bray/sql/funcs.so' LANGUAGE 'c';
    
CREATE TABLE product (
    id        char(8) PRIMARY KEY,
    eanprefix char(8) CHECK (eanprefix ~ '[0-9]{2}-[0-9]{5}')
                      REFERENCES brandname(ean_prefix),
    eancode   char(6) CHECK (eancode ~ '[0-9]{6}'),
    CONSTRAINT ean    CHECK (ean_checkdigit(eanprefix, eancode))
);
   
  

Bugs

Une fonction C ne peut pas retourner un ensemble de valeurs.

Compatibilité

CREATE FUNCTION est une extension du langage Postgres.

SQL/PSM

Note

PSM pour Persistent Stored Modules. C'est un langage procedural et il était à l'origine espéré que PSM aurait été ratifié comme standard officiel en 1996. Au milieu de 1998, ce n'est pas encore le cas, mais il faut espérer que PSM deviendra un standard.

SQL/PSM CREATE FUNCTION a la syntaxe suivante :
CREATE FUNCTION name
    ( [ [ IN | OUT | INOUT ] etereable>eable> type [, ...] ] )
     RETURNS rtype
     LANGUAGE 'langname'
     ESPECIFIC routine
     SQL-statement