Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  GUI  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Type de données
Référence des instructions
Référence des fonctions
Les premiers pas
DBeaver
Navicat
Préface
Notes légal
Dictionnaire
Recherche

CREATE FUNCTION

Crée une fonction
PostgreSQL

Syntaxe

CREATE FUNCTION
name ( [ [ argmode ] [ argname ] argtype [ { DEFAULT | = } default_expr ] [, ...] ] )
[ RETURNS rettype
| RETURNS TABLE ( column_name column_type [, ...] ) ]
{ LANGUAGE lang_name
| TRANSFORM { FOR TYPE type_name } [, ... ]
| WINDOW
| { IMMUTABLE | STABLE | VOLATILE }
| [ NOT ] LEAKPROOF
| { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT }
| { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER }
| PARALLEL { UNSAFE | RESTRICTED | SAFE }
| COST execution_cost
| ROWS result_rows
| SET configuration_parameter { TO value | = value | FROM CURRENT }
| AS 'definition'
| AS 'obj_file', 'link_symbol'
} ...
[ WITH ( attribute [, ...] ) ]

Paramètres

Nom Description
name Ce paramètre permet d'indiquer le nom (éventuellement qualifié par le schéma) de la fonction à créer.
argmode Ce paramètre permet d'indiquer le mode d'un paramètre : IN, OUT, INOUT ou VARIADIC. S'il est omis, la valeur par défaut est IN. Seuls les paramètres OUT peuvent suivre un paramètre VARIADIC. De plus, les paramètres OUT et INOUT ne peuvent pas être utilisés avec la notation RETURNS TABLE.
argname Ce paramètre permet d'indiquer le nom d'un paramètre. Certains langages (dont SQL et PL/pgSQL) vous permettent d'utiliser le nom dans le corps de la fonction. Pour d'autres langages, le nom d'un paramètre d'entrée n'est qu'une documentation supplémentaire, en ce qui concerne la fonction elle-même ; mais vous pouvez utiliser des noms de paramètres d'entrée lors de l'appel d'une fonction pour améliorer la lisibilité. Dans tous les cas, le nom d'un paramètre de sortie est significatif, car il définit le nom de la colonne dans le type de ligne de résultat. (Si vous omettez le nom d'un paramètre de sortie, le système choisira un nom de colonne par défaut.)
argtype Ce paramètre permet d'indiquer le(s) type(s) de données des paramètres de la fonction (éventuellement qualifiés de schéma), le cas échéant. Les types de paramètres peuvent être des types de base, composites ou de domaine, ou peuvent référencer le type d'une colonne de table. Selon le langage d'implémentation, il peut également être autorisé de spécifier des «pseudo-types» tels que cstring. Les pseudo-types indiquent que le type de paramètres réel est soit incomplètement spécifié, soit en dehors de l'ensemble des types de données SQL ordinaires. Le type d'une colonne est référencé en écrivant table_name.column_name%TYPE. L'utilisation de cette fonctionnalité peut parfois aider à rendre une fonction indépendante des modifications apportées à la définition d'une table.
default_expr Ce paramètre permet d'indiquer une expression à utiliser comme valeur par défaut si le paramètre n'est pas spécifié. L'expression doit être coercitive au type d'argument du paramètre. Seuls les paramètres d'entrée (y compris INOUT) peuvent avoir une valeur par défaut. Tous les paramètres d'entrée suivant un paramètre avec une valeur par défaut doivent également avoir des valeurs par défaut.
rettype Ce paramètre permet d'indiquer le type de données de retour (éventuellement qualifié de schéma). Le type de retour peut être un type de base, composite ou de domaine, ou peut référencer le type d'une colonne de table. Selon le langage d'implémentation, il peut également être autorisé de spécifier des «pseudo-types» tels que cstring. Si la fonction n'est pas censée renvoyer une valeur, spécifiez void comme type de retour. Lorsqu'il existe des paramètres OUT ou INOUT, la clause RETURNS peut être omise. S'il est présent, il doit être en accord avec le type de résultat impliqué par les paramètres de sortie : RECORD s'il existe plusieurs paramètres de sortie, ou le même type que le paramètre de sortie unique. Le modificateur SETOF indique que la fonction renverra un ensemble d'éléments plutôt qu'un seul élément. Le type d'une colonne est référencé en écrivant table_name.column_name%TYPE.
column_name Ce paramètre permet d'indiquer le nom d'une colonne de sortie dans la syntaxe RETURNS TABLE. C'est effectivement une autre façon de déclarer un paramètre OUT nommé, sauf que RETURNS TABLE implique également RETURNS SETOF.
column_type Ce paramètre permet d'indiquer le type de données d'une colonne de sortie dans la syntaxe RETURNS TABLE.
lang_name Ce paramètre permet d'indiquer le nom du langage dans lequel la fonction est implémentée. Il peut s'agir de sql, c, internal, ou le nom d'un langage procédural défini par l'utilisateur, par exemple, plpgsql. Mettre le nom entre guillemets simples est déconseillé et nécessite une correspondance de la casse.
TRANSFORM { FOR TYPE type_name } [, ... ] } Ce paramètre permet d'indiquer les listes transformant un appel à la fonction doivent s'appliquer. Les transformations convertissent entre les types SQL et les types de données spécifiques au langage ; voir CREATE TRANSFORM. Les implémentations de langage procédural ont généralement une connaissance codée en dur des types intégrés, ils n'ont donc pas besoin d'être répertoriés ici. Si une implémentation de langage procédural ne sait pas comment gérer un type et qu'aucune transformation n'est fournie, elle reviendra à un comportement par défaut pour convertir les types de données, mais cela dépend de l'implémentation.
WINDOW Ce paramètre permet d'indiquer que la fonction est une fonction de fenêtre plutôt qu'une fonction simple. Ceci n'est actuellement utile que pour les fonctions écrites en C. L'attribut WINDOW ne peut pas être modifié lors du remplacement d'une définition de fonction existante.
IMMUTABLE Ce paramètre permet d'indiquer que la fonction ne peut pas modifier la base de données et renvoie toujours le même résultat lorsqu'on lui donne les mêmes valeurs de paramètre ; c'est-à-dire qu'il ne fait pas de recherche dans la base de données et n'utilise pas d'informations n'étant pas directement présentes dans sa liste de paramètres. Si cette option est donnée, tout appel de la fonction avec des arguments entièrement constants peut être immédiatement remplacé par la valeur de la fonction.
STABLE Ce paramètre permet d'indiquer que la fonction ne peut pas modifier la base de données et qu'au cours d'un seul balayage de table, elle renverra systématiquement le même résultat pour les mêmes valeurs d'argument, mais que son résultat pourrait changer d'une instruction SQL à l'autre. C'est la sélection appropriée pour les fonctions dont les résultats dépendent des recherches dans la base de données, des variables de paramètres (telles que le fuseau horaire actuel),... (Ceci est inapproprié pour les déclencheurs AFTER souhaitant interroger les lignes modifiées par la commande actuelle.) La famille de fonctions current_timestamp est qualifiée de stable, car leurs valeurs ne changent pas au cours d'une transaction.
VOLATILE Ce paramètre permet d'indiquer que la valeur de la fonction peut changer même au cours d'un seul balayage de table, de sorte qu'aucune optimisation ne peut être effectuée. Relativement peu de fonctions de base de données sont volatiles dans ce sens ; quelques exemples sont random(), currval(), timeofday(). Mais notez que toute fonction ayant des effets secondaires doit être classée volatile, même si son résultat est assez prévisible, pour éviter que les appels ne soient optimisés à distance ; un exemple est setval().
LEAKPROOF Ce paramètre permet d'indiquer que la fonction n'a pas d'effets secondaires. Il ne révèle aucune information sur ses paramètres autre que par sa valeur de retour. Par exemple, une fonction renvoyant un message d'erreur pour certaines valeurs de paramètres mais pas pour d'autres, ou incluant les valeurs de paramètres dans un message d'erreur, n'est pas étanche. Cela affecte la façon dont le système exécute les requêtes sur les vues créées avec l'option security_barrier ou les tables avec la sécurité au niveau des lignes activée. Le système appliquera les conditions des politiques de sécurité et des vues des barrières de sécurité avant toute condition fournie par l'utilisateur à partir de la requête elle-même contenant des fonctions non étanches, afin d'empêcher l'exposition accidentelle des données. Les fonctions et les opérateurs marqués comme étanches sont supposés être dignes de confiance et peuvent être exécutés avant les conditions des politiques de sécurité et des vues des barrières de sécurité. De plus, les fonctions ne prenant pas de paramètres ou ne recevant aucun paramètre de la vue ou de la table de barrière de sécurité n'ont pas besoin d'être marquées comme étanches pour être exécutées avant les conditions de sécurité.
CALLED ON NULL INPUT Ce paramètre permet d'indiquer que la fonction sera appelée normalement lorsque certains de ses paramètres sont nuls. Il est alors de la responsabilité de l'auteur de la fonction de vérifier les valeurs nulles si nécessaire et de répondre de manière appropriée.
RETURNS NULL ON NULL INPUT
STRICT
Ce paramètre permet d'indiquer la réaction. RETURNS NULL ON NULL INPUT ou STRICT indique que la fonction renvoie toujours null chaque fois que l'un de ses paramètres est null. Si ce paramètre est spécifié, la fonction n'est pas exécutée lorsqu'il y a des paramètres est nuls ; à la place, un résultat nul est supposé automatiquement.
[EXTERNAL] SECURITY INVOKER Ce paramètre permet d'indiquer que la fonction doit être exécutée avec les privilèges de l'utilisateur l'appelant. C'est la valeur par défaut.
[EXTERNAL] SECURITY DEFINER Ce paramètre permet d'indiquer que la fonction doit être exécutée avec les privilèges de l'utilisateur qui la possède.
PARALLEL mode Ce paramètre permet d'indiquer le mode parallèle :
Mode Description
UNSAFE Ce mode permet d'indiquer que la fonction ne peut pas être exécutée en mode parallèle et la présence d'une telle fonction dans une instruction SQL force un plan d'exécution en série. C'est la valeur par défaut.
RESTRICTED Ce mode permet d'indiquer que la fonction peut être exécutée en mode parallèle, mais l'exécution est limitée au chef de groupe parallèle.
SAFE Ce mode permet d'indiquer que la fonction peut être exécutée en toute sécurité en mode parallèle sans restriction.
Les fonctions doivent être étiquetées parallèles non sécurisées si elles modifient l'état de la base de données, ou si elles apportent des modifications à la transaction telles que l'utilisation de sous-transactions, ou si elles accèdent à des séquences ou tentent d'apporter des modifications persistantes aux paramètres (par exemple, setval). Ils doivent être étiquetés comme parallèles restreints s'ils accèdent aux tables temporaires, à l'état de connexion client, aux curseurs, aux instructions préparées ou à divers états backend-local que le système ne peut pas synchroniser en mode parallèle (par exemple, setseed ne peut être exécuté que par le chef de groupe car un changement effectué par un autre processus ne serait pas reflété dans le leader). En général, si une fonction est étiquetée comme étant sûre lorsqu'elle est restreinte ou dangereuse, ou si elle est étiquetée comme étant restreinte alors qu'elle est en fait dangereuse, elle peut générer des erreurs ou produire des réponses erronées lorsqu'elle est utilisée dans une requête parallèle. Les fonctions du langage C pourraient en théorie présenter un comportement totalement indéfini si elles étaient mal étiquetées, car il n'y a aucun moyen pour le système de se protéger contre le code C arbitraire, mais dans la plupart des cas, le résultat ne sera pas pire que pour toute autre fonction. En cas de doute, les fonctions doivent être étiquetées comme UNSAFE, ce qui est la valeur par défaut.
execution_cost Ce paramètre permet d'indiquer un nombre positif donnant le coût d'exécution estimé de la fonction, en unités de cpu_operator_cost. Si la fonction renvoie un ensemble, il s'agit du coût par ligne renvoyée. Si le coût n'est pas spécifié, 1 unité est supposée pour le langage C et les fonctions internes, et 100 unités pour les fonctions dans toutes les autres langues. Des valeurs plus élevées amènent le planificateur à essayer d'éviter d'évaluer la fonction plus souvent que nécessaire.
result_rows Ce paramètre permet d'indiquer un nombre positif donnant le nombre estimé de lignes que le planificateur doit s'attendre à ce que la fonction renvoie. Ceci n'est autorisé que lorsque la fonction est déclarée pour retourner un ensemble. Le résultat par défaut est de 1000 lignes.
configuration_parameter Ce paramètre permet d'indiquer le paramètre de configuration.
value Ce paramètre permet d'indiquer la valeur. La clause SET fait que le paramètre de configuration spécifié est défini sur la valeur spécifiée lorsque la fonction est entrée, puis restauré à sa valeur précédente lorsque la fonction se termine. Le SET FROM CURRENT enregistre la valeur du paramètre étant en cours lorsque CREATE FUNCTION est exécuté comme valeur à appliquer lorsque la fonction est entrée. Si une clause SET est attachée à une fonction, alors les effets d'une commande SET LOCAL exécutée à l'intérieur de la fonction pour la même variable sont limités à la fonction : la valeur antérieure du paramètre de configuration est toujours restaurée à la sortie de la fonction. Cependant, une commande SET ordinaire (sans LOCAL) remplace la clause SET, comme elle le ferait pour une commande SET LOCAL précédente : les effets d'une telle commande persisteront après la sortie de la fonction, à moins que la transaction en cours ne soit annulée.
definition Ce paramètre permet d'indiquer une constante de chaîne de caractères définissant la fonction ; le sens dépend de la langue. Il peut s'agir d'un nom de fonction interne, du chemin d'accès à un fichier objet, d'une commande SQL ou d'un texte dans un langage procédural. Il est souvent utile d'utiliser les guillemets dollar pour écrire la chaîne de définition de la fonction, plutôt que la syntaxe normale des guillemets simples. Sans guillemets dollar, les guillemets simples ou les barres obliques inverses dans la définition de la fonction doivent être échappés en les doublant.
obj_file, link_symbol Ces paramètres permettent d'indiquer les noms de fichiers et le symbole de lien. Cette forme de clause AS est utilisée pour les fonctions du langage C chargeables dynamiquement lorsque le nom de la fonction dans le code source du langage C n'est pas le même que le nom de la fonction SQL. La chaîne de caractères obj_file est le nom du fichier de bibliothèque partagée contenant la fonction C compilée, et est interprétée comme pour la commande LOAD. La chaîne de caractères link_symbol est le symbole de lien de la fonction, c'est-à-dire le nom de la fonction dans le code source du langage C. Si le symbole de lien est omis, il est supposé être le même que le nom de la fonction SQL définie. Les noms C de toutes les fonctions doivent être différents, vous devez donc donner aux fonctions C surchargées des noms C différents (par exemple, utilisez les types de paramètres dans le cadre des noms C). Lorsque des appels CREATE FUNCTION répétés font référence au même fichier objet, le fichier n'est chargé qu'une fois par session. Pour décharger et recharger le fichier (peut-être pendant le développement), démarrez une nouvelle session.
attribute Ce paramètre permet d'indiquer des informations facultatives sur la fonction. Les attributs suivants peuvent apparaître ici :
Attribut Description
isStrict Cette attribut est équivalent à STRICT ou RETURNS NULL ON NULL INPUT.
isCachable Cette attribut est un équivalent obsolète de IMMUTABLE ; il est toujours accepté pour des raisons de compatibilité descendante.
Les noms d'attribut ne sont pas sensibles à la casse.

Description

Cette instruction permet de définir une nouvelle fonction.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Jeudi, le 14 Octobre 2021