CREATE OPERATOR
CREATE OPERATOR — Définir un nouvel opérateur
Synopsis
CREATE OPERATOR nom (
PROCEDURE = nomfonc
[, LEFTARG = typegauche ]
[, RIGHTARG = typedroit ]
[, COMMUTATOR = op_com ]
[, NEGATOR = op_neg ]
[, RESTRICT = proc_res ]
[, JOIN = proc_join ]
[, HASHES ] [, MERGES ]
[, SORT1 = op_tri_gauche ]
[, SORT2 = op_tri_droit ]
[, LTCMP = op_inf ]
[, GTCMP = op_sup ]
)
Description
CREATE OPERATOR
définit un nouvel opérateur,
nom
. L'utilisateur qui définit un
opérateur en devient propriétaire. Si un nom de schéma est donné,
l'opérateur est créé dans le schéma spécifié. Sinon, il est créé
dans le schéma courant.
Le nom de l'opérateur est une séquence d'au plus NAMEDATALEN-1 (63 par défaut) caractères parmi la
liste suivante :
+ - * / < > = ~ ! @ # % ^ & | ` ?
Il existe quelques restrictions dans le choix du nom :
-
-- et /* ne
peuvent pas apparaître dans le nom d'un opérateur car ils
sont pris pour le début d'un commentaire.
-
Un nom d'opérateur multicaractères ne peut pas finir avec
+ ou - sauf
si le nom contient l'un, au moins, de ces caractères :
Par exemple, @- est un nom
d'opérateur autorisé mais *- n'en
est pas un. Cette restriction permet à PostgreSQL™ d'analyser les
commandes compatibles SQL sans nécessiter d'espaces entre les
lexèmes.
L'opérateur != est remplacé par <> à la saisie, ces deux noms sont donc
toujours équivalents.
Au moins un des deux LEFTARG et RIGHTARG doit être défini. Pour les opérateurs
binaires, les deux doivent l'être. Pour les opérateurs unaires
droits, seul LEFTARG doit l'être,
RIGHTARG pour les opérateurs unaires
gauches.
La procédure
nomfonc
doit
avoir été précédemment définie par
CREATE FUNCTION
et doit accepter
le bon nombre d'arguments (un ou deux) des types indiqués.
Les autres clauses spécifient des clauses optionnelles
d'optimisation d'opérateur. Leur signification est détaillée dans
Section 33.13,
« Informations sur l'optimisation d'un opérateur ».
Paramètres
-
nom
-
Le nom de l'opérateur à définir. Voir ci-dessus pour les
caractères autorisés. Le nom peut être qualifié du nom du
schéma, par exemple CREATE OPERATOR
monschema.+ (...). Dans le cas contraire, il est créé
dans le schéma courant. Deux opérateurs dans le même schéma
peuvent avoir le même nom s'ils opérent sur des types de
données différents. On parle alors de surchargement.
-
nomfonc
-
La fonction utilisée pour implanter cet opérateur.
-
typegauche
-
Le type de données de l'opérande gauche de l'opérateur, s'il
existe. Cette option est omise pour un opérateur unaire
gauche.
-
typedroit
-
Le type de données de l'opérande droit de l'opérateur, s'il
existe. Cette option est omise pour un opérateur unaire
droit.
-
op_com
-
Le commutateur de cet opérateur.
-
op_neg
-
La négation de cet opérateur.
-
proc_res
-
La fonction d'estimation de la sélectivité de restriction
pour cet opérateur.
-
proc_join
-
La fonction d'estimation de la sélectivité de jointure pour
cet opérateur.
-
HASHES
-
L'opérateur peut supporter une jointure de hachage.
-
MERGES
-
L'opérateur peut supporter une jointure d'assemblage.
-
op_tri_gauche
-
Si l'opérateur supporte une jointure d'assemblage, cette
clause spécifie l'opérateur inférieur de tri du type de
données gauche de l'opérateur.
-
op_tri_droit
-
Si l'opérateur supporte une jointure d'assemblage, cette
clause spécifie l'opérateur inférieur de tri du type de
données droite de l'opérateur.
-
op_inf
-
Si l'opérateur supporte une jointure d'assemblage, cette
clause spécifie l'opérateur inférieur de comparaison des
types de données en entrée de l'opérateur.
-
op_sup
-
Si l'opérateur supporte une jointure d'assemblage, cette
clause spécifie l'opérateur supérieur de comparaison des
types de données en entrée de l'opérateur.
La syntaxe OPERATOR() est utilisée pour
préciser un nom d'opérateur qualifié d'un schéma dans
op_com
ou dans les autres arguments
optionnels. Par exemple
COMMUTATOR = OPERATOR(mon_schema.===) ,
Exemples
La commande suivante définit un nouvel opérateur,
« area-equality », pour le
type de données box :
CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
PROCEDURE = area_equal_procedure,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_procedure,
JOIN = area_join_procedure,
HASHES,
SORT1 = <<<,
SORT2 = <<<
-- Puisque les opérateurs de tri sont précisés, MERGES est assumé.
-- LTCMP et GTCMP sont respectivement < et >.
);
Compatibilité
CREATE OPERATOR
est
une extension PostgreSQL™.
Il n'existe pas d'opérateurs utilisateur dans le standard SQL.