Section courante

A propos

Section administrative du site

CREATE AGGREGATE

Crée un agrégat
PostgreSQL

Syntaxe

CREATE AGGREGATE name ( [ argmode ] [ argname ] arg_data_type [ , ... ] ) (
SFUNC = sfunc,
STYPE = state_data_type
[ , SSPACE = state_data_size ]
[ , FINALFUNC = ffunc ]
[ , FINALFUNC_EXTRA ]
[ , COMBINEFUNC = combinefunc ]
[ , SERIALFUNC = serialfunc ]
[ , DESERIALFUNC = deserialfunc ]
[ , INITCOND = initial_condition ]
[ , MSFUNC = msfunc ]
[ , MINVFUNC = minvfunc ]
[ , MSTYPE = mstate_data_type ]
[ , MSSPACE = mstate_data_size ]
[ , MFINALFUNC = mffunc ]
[ , MFINALFUNC_EXTRA ]
[ , MINITCOND = minitial_condition ]
[ , SORTOP = sort_operator ]
[ , PARALLEL = { SAFE | RESTRICTED | UNSAFE } ]
)
Nouvelle syntaxe
CREATE AGGREGATE name ( [ [ argmode ] [ argname ] arg_data_type [ , ... ] ]
ORDER BY [ argmode ] [ argname ] arg_data_type [ , ... ] ) (
SFUNC = sfunc,
STYPE = state_data_type
[ , SSPACE = state_data_size ]
[ , FINALFUNC = ffunc ]
[ , FINALFUNC_EXTRA ]
[ , INITCOND = initial_condition ]
[ , PARALLEL = { SAFE | RESTRICTED | UNSAFE } ]
[ , HYPOTHETICAL ]
)
CREATE AGGREGATE name (
BASETYPE = base_type,
SFUNC = sfunc,
STYPE = state_data_type
[ , SSPACE = state_data_size ]
[ , FINALFUNC = ffunc ]
[ , FINALFUNC_EXTRA ]
[ , COMBINEFUNC = combinefunc ]
[ , SERIALFUNC = serialfunc ]
[ , DESERIALFUNC = deserialfunc ]
[ , INITCOND = initial_condition ]
[ , MSFUNC = msfunc ]
[ , MINVFUNC = minvfunc ]
[ , MSTYPE = mstate_data_type ]
[ , MSSPACE = mstate_data_size ]
[ , MFINALFUNC = mffunc ]
[ , MFINALFUNC_EXTRA ]
[ , MINITCOND = minitial_condition ]
[ , SORTOP = sort_operator ]
)
Ancienne syntaxe

Paramètres

Nom Description
name Ce paramètre permet d'indiquer le nom (éventuellement qualifié par le schéma) de la fonction d'agrégat à créer.
argmode Ce paramètre permet d'indiquer le mode d'un paramètre : IN ou VARIADIC. (Les fonctions d'agrégat ne prennent pas en charge les paramètres OUT.) S'il est omis, la valeur par défaut est IN. Seul le dernier paramètre peut être marqué VARIADIC.
argname Ce paramètre permet d'indiquer le nom d'un paramètre. Ceci n'est actuellement utile qu'à des fins de documentation. S'il est omis, le paramètre n'a pas de nom.
arg_data_type Ce paramètre permet d'indiquer un type de données d'entrée sur lequel cette fonction d'agrégat opère. Pour créer une fonction d'agrégation sans argument, écrivez * à la place de la liste des spécifications de paramètre. (Un exemple d'un tel agrégat est count(*).)
base_type Ce paramètre permet d'indiquer le type de base. Dans l'ancienne syntaxe de CREATE AGGREGATE, le type de données d'entrée est spécifié par un paramètre de type de base plutôt que d'être écrit à côté du nom de l'agrégat. Notez que cette syntaxe n'autorise qu'un seul paramètre d'entrée. Pour définir une fonction d'agrégation sans paramètre avec cette syntaxe, spécifiez le type de base comme «ANY» (pas *). Les agrégats d'ensembles ordonnés ne peuvent pas être définis avec l'ancienne syntaxe.
sfunc Ce paramètre permet d'indiquer le nom de la fonction de transition d'état à appeler pour chaque ligne d'entrée. Pour une fonction d'agrégation normale à N paramètres, le sfunc doit prendre N+1 paramètres, le premier étant de type state_data_type et le reste correspondant au(x) type(s) de données d'entrée déclarés de l'agrégat. La fonction doit renvoyer une valeur de type state_data_type. Cette fonction prend la valeur d'état actuelle et la ou les valeurs de données d'entrée actuelles, et renvoie la valeur d'état suivante. Pour les agrégats d'ensembles ordonnés (y compris d'ensembles hypothétiques), la fonction de transition d'état ne reçoit que la valeur d'état actuelle et les paramètres agrégés, pas les paramètres directs. Sinon c'est pareil.
state_data_type Ce paramètre permet d'indiquer un type de données pour la valeur d'état de l'agrégat.
state_data_size Ce paramètre permet d'indiquer la taille moyenne approximative (en octets) de la valeur d'état de l'agrégat. Si ce paramètre est omis ou vaut zéro, une estimation par défaut est utilisée sur la base du state_data_type. Le planificateur utilise cette valeur pour estimer la mémoire requise pour une requête agrégée groupée. Le planificateur envisagera d'utiliser l'agrégation de hachage pour une telle requête uniquement si la table de hachage est estimée tenir dans work_mem ; par conséquent, des valeurs élevées de ce paramètre découragent l'utilisation de l'agrégation de hachage.
ffunc Ce paramètre permet d'indiquer le nom de la fonction finale appelée pour calculer le résultat de l'agrégat une fois que toutes les lignes d'entrée ont été parcourues. Pour un agrégat normal, cette fonction doit prendre un seul paramètre de type state_data_type. Le type de données de retour de l'agrégat est défini comme le type de retour de cette fonction. Si ffunc n'est pas spécifié, la valeur d'état de fin est utilisée comme résultat de l'agrégat et le type de retour est state_data_type. Pour les agrégats d'ensembles ordonnés (y compris d'ensembles hypothétiques), la fonction finale reçoit non seulement la valeur d'état final, mais également les valeurs de tous les paramètres directs. Si FINALFUNC_EXTRA est spécifié, alors en plus de la valeur d'état final et de tous les paramètres directs, la fonction finale reçoit des valeurs NULL supplémentaires correspondant aux paramètres réguliers (agrégés) de l'agrégat. Ceci est principalement utile pour permettre une résolution correcte du type de résultat d'agrégat lorsqu'un agrégat polymorphe est en cours de définition.
combinefunc Ce paramètre permet d'indiquer la fonction combinefunc peut éventuellement être spécifiée pour permettre à la fonction d'agrégat de prendre en charge l'agrégation partielle. S'il est fourni, le combinefunc doit combiner deux valeurs state_data_type, chacune contenant le résultat de l'agrégation sur un sous-ensemble des valeurs d'entrée, pour produire un nouveau state_data_type représentant le résultat de l'agrégation sur les deux ensembles d'entrées. Cette fonction peut être considérée comme un sfunc, où au lieu d'agir sur une ligne d'entrée individuelle et de l'ajouter à l'état d'agrégation en cours, elle ajoute un autre état d'agrégat à l'état d'exécution. combinefunc doit être déclaré comme prenant deux paramètres de state_data_type et renvoyant une valeur de state_data_type. Optionnellement, cette fonction peut être «stricte». Dans ce cas, la fonction ne sera pas appelée lorsque l'un des états d'entrée est nul ; l'autre état sera considéré comme le résultat correct. Pour les fonctions d'agrégation dont state_data_type est interne, le combinefunc ne doit pas être strict. Dans ce cas, le combinefunc doit s'assurer que les états nuls sont gérés correctement et que l'état renvoyé est correctement stocké dans le contexte de la mémoire agrégée.
serialfunc Ce paramètre permet d'indiquer une fonction d'agrégation dont state_data_type est interne ne peut participer à l'agrégation parallèle que si elle possède une fonction serialfunc, devant sérialiser l'état d'agrégation en une valeur d'octet pour la transmission à un autre processus. Cette fonction doit prendre un seul paramètre de type interne et renvoyer le type bytea. Un deserialfunc correspondant est également requis.
deserialfunc Ce paramètre permet de désérialiser un état agrégé précédemment sérialisé dans state_data_type. Cette fonction doit prendre deux paramètres de types bytea et internal, et produire un résultat de type internal. (Remarque : le deuxième paramètre interne n'est pas utilisé, mais est requis pour des raisons de sécurité de type.)
initial_condition Ce paramètre permet d'indiquer le réglage initial de la valeur d'état. Il doit s'agir d'une constante chaîne sous la forme acceptée pour le type de données state_data_type. Si elle n'est pas spécifiée, la valeur d'état commence par null.
msfunc Ce paramètre permet d'indiquer le nom de la fonction de transition d'état avant à appeler pour chaque ligne d'entrée en mode d'agrégat mobile. C'est exactement comme la fonction de transition normale, sauf que son premier paramètre et son résultat sont de type mstate_data_type, pouvant être différent de state_data_type.
minvfunc Ce paramètre permet d'indiquer le nom de la fonction de transition d'état inverse à utiliser en mode agrégat mobile. Cette fonction a les mêmes types de paramètre et de résultat que msfunc, mais elle est utilisée pour supprimer une valeur de l'état agrégé actuel, plutôt que d'y ajouter une valeur. La fonction de transition inverse doit avoir le même attribut de rigueur que la fonction de transition d'état direct.
mstate_data_type Ce paramètre permet d'indiquer le type de données pour la valeur d'état de l'agrégat, lors de l'utilisation du mode d'agrégat mobile.
mstate_data_size Ce paramètre permet d'indiquer la taille moyenne approximative (en octets) de la valeur d'état de l'agrégat, lors de l'utilisation du mode d'agrégat mobile. Cela fonctionne de la même manière que state_data_size.
mffunc Ce paramètre permet d'indiquer le nom de la fonction finale appelée pour calculer le résultat de l'agrégat une fois que toutes les lignes d'entrée ont été parcourues, lors de l'utilisation du mode d'agrégat mobile. Cela fonctionne de la même manière que fffunc, sauf que le type de son premier paramètre est mstate_data_type et que des paramètres factices supplémentaires sont spécifiés en écrivant MFINALFUNC_EXTRA. Le type de résultat agrégé déterminé par mffunc ou mstate_data_type doit correspondre à celui déterminé par l'implémentation régulière de l'agrégat.
minitial_condition Ce paramètre permet d'indiquer la valeur initial d'état, lors de l'utilisation du mode d'agrégat mobile. Cela fonctionne de la même manière que initial_condition.
sort_operator Ce paramètre permet d'indiquer l'opérateur de tri associé pour un agrégat de type MIN ou MAX. Il s'agit simplement d'un nom d'opérateur (éventuellement qualifié de schéma). L'opérateur est supposé avoir les mêmes types de données d'entrée que l'agrégat (devant être un agrégat normal à un seul paramètre).
PARALLEL Ce paramètre permet d'indiquer les significations de PARALLEL SAFE, PARALLEL RESTRICTED et PARALLEL UNSAFE sont les mêmes que pour CREATE FUNCTION. Un agrégat ne sera pas pris en compte pour la parallélisation s'il est marqué PARALLEL UNSAFE (ce qui est la valeur par défaut !) ou PARALLEL RESTRICTED. A noter que les marquages parallèles de sécurité des fonctions support de l'agrégat ne sont pas consultés par le planificateur, seul le marquage de l'agrégat lui-même.
HYPOTHETICAL Ce paramètre permet d'indiquer, pour les agrégats d'ensembles ordonnés uniquement, que les paramètres d'agrégat doivent être traités conformément aux exigences des agrégats d'ensembles hypothétiques : c'est-à-dire que les derniers paramètres directs doivent correspondre aux types de données des paramètres agrégés (WITHIN GROUP). L'indicateur HYPOTHETICAL n'a aucun effet sur le comportement à l'exécution, uniquement sur la résolution au moment de l'analyse des types de données et des collations des paramètres de l'agrégat.

Description

Cette instruction permet de définir une nouvelle fonction d'agrégat.



Dernière mise à jour : Jeudi, le 14 Octobre 2021