CREATE OPERATOR

Nom

CREATE OPERATOR -- définit 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 son propriétaire. Si un nom de schéma est donné, alors 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 moins NAMEDATALEN-1 (63 par défaut) caractères de la liste suivante :

+ - * / < > = ~ ! @ # % ^ & | ` ?

Il existe quelques restrictions dans le choix du nom :

L'opérateur != correspond à <> en entrée, donc ces deux noms sont toujours équivalents.

Au moins un de LEFTARG et RIGHTARG doit être défini. Pour les opérateurs binaires, les deux doivent être définis. Pour les opérateurs unaires droits, seul LEFTARG devrait être défini alors que pour les opérateurs unaires gauches seul RIGHTARG devrait être défini.

La procédure nomfonc doit être été précédemment définie en utilisant CREATE FUNCTION et doit accepter le bon nombre d'arguments (soit 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.11.

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é avec le nom du schéma, par exemple CREATE OPERATOR monschema.+ (...). Sinon, l'opérateur 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. Ceci est appelé le surchargement.

nomfonc

La fonction utilisée pour implémenter cet opérateur.

typegauche

Le type de l'argument gauche de l'opérateur, s'il existe. Cette option sera omise pour un opérateur unaire gauche.

typedroit

Le type de l'argument droit de l'opérateur, s'il existe. Cette option sera 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é restreinte pour cet opérateur.

proc_join

La fonction d'estimation de la sélectivité de jointure pour cet opérateur.

HASHES

Indique que cet opérateur peut supporter une jointure de découpage.

MERGES

Indique que cet opérateur peut supporter une jointure d'assemblage.

op_tri_gauche

Si cet opérateur peut supporter une jointure d'assemblage, l'opérateur inférieur qui trie le type de données à gauche de cet opérateur.

op_tri_droit

Si cet opérateur peut supporter une jointure d'assemblage, l'opérateur supérieur qui trie le type de données à droite de cet opérateur.

op_inf

Si cet opérateur peut supporter une jointure d'assemblage, l'opérateur inférieur qui compare les types de données de cet opérateur.

op_sup

Si cet opérateur peut supporter une jointure d'assemblage, l'opérateur supérieur qui compare les types de données de cet opérateur.

Pour donner un nom d'opérateur qualifié d'un schéma dans op_com ou les autres arguments optionnels, utilisez la syntaxe OPERATOR() par exemple

COMMUTATOR = OPERATOR(mon_schema.===) ,

Notes

Référez-vous à Section 33.11 pour plus d'informations.

Utilisez DROP OPERATOR pour supprimer les opérateurs définis par l'utilisateur sur une base de données.

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 = <<<
    -- Since sort operators were given, MERGES is implied.
    -- LTCMP and GTCMP are assumed to be < and > respectively
);

Compatibilité

CREATE OPERATOR est une extension PostgreSQL. Il n'existe pas d'opérateurs définis par l'utilisateur dans le standard SQL.