CREATE OPERATOR CLASS

Nom

CREATE OPERATOR CLASS -- définit une nouvelle classe d'opérateur

Synopsis

CREATE OPERATOR CLASS nom [ DEFAULT ] FOR TYPE type_données USING méthode_index AS
  {  OPERATOR numéro_stratégie nom_opérateur [ ( op_type, op_type ) ] [ RECHECK ]
   | FUNCTION numéro_support nom_fonction ( type_argument [, ...] )
   | STORAGE type_stockage
  } [, ... ]

Description

CREATE OPERATOR CLASS crée une nouvelle classe d'opérateur. Une classe d'opérateur définit comment un certain type de données peut être utilisé avec un index. La classe d'opérateur spécifie que certains opérateurs joueront des rôles particuliers ou des << stratégies >> pour ce type de données et cette méthode d'indexage. La classe d'opérateur spécifie aussi les procédures de support pour être utilisée par la méthode d'indexage quand la classe d'opérateur est sélectionnée pour une colonne d'index. Tous les opérateurs et fonctions utilisés par une classe d'opérateur doivent être définis avant la création de la classe d'opérateur.

Si un nom de schéma est donné, alors la classe d'opérateur est créée dans le schéma spécifié. Sinon, elle est créée dans le schéma courant. Deux classes d'opérateur peuvent avoir le même nom seulement s'ils sont pour des méthodes d'indexage différentes.

L'utilisateur qui définit une classe d'opérateur devient son propriétaire. Actuellement, le créateur doit être un superutilisateur. (Cette restriction est faite parce qu'une définition erronée d'une classe d'opérateur pourrait gêner le serveur, voire causer un arrêt brutal de celui-ci.)

Actuellement, CREATE OPERATOR CLASS ne vérifie pas si la définition de la classe d'opérateur inclut tous les opérateurs et fonctions requis par la méthode d'indexage. C'est de la responsabilité de l'utilisateur de définir une classe d'opérateur valide.

Référez-vous au Section 31.14 pour plus d'informations.

Paramètres

nom

Le nom de la classe d'opérateur à créer. Ce nom pourrait être qualifié avec le nom du schéma.

DEFAULT

Si présent, la classe d'opérateur deviendra la classe d'opérateur par défaut pour ce type de données. Au plus une classe d'opérateur peut être la classe par défaut pour un type de données et une méthode d'indexage spécifiques.

type_données

Le type de données de la colonne pour cette classe d'opérateur.

méthode_index

Le nom de la méthode d'indexage pour cette classe d'opérateur.

numéro_stratégie

Le numéro de stratégie de la méthode d'indexage pour un opérateur associé avec la classe d'opérateur.

nom_opérateur

Le nom (pouvant être qualifié du nom du schéma) d'un opérateur associé avec la classe d'opérateur.

op_type

Le type de données de l'opérande d'un opérateur ou NONE pour signifier un opérateur unaire. Les types de données de l'opérande pourraient être omis dans le cas normal où ils sont identiques au type de données de la classe d'opérateur.

RECHECK

Si présent, l'index est << à perte >> pour cet opérateur. Du coup, les lignes récupérées en utilisant l'index doivent être de nouveau vérifiées pour s'assurer qu'elles satisfont réellement la clause de qualification impliquant cet opérateur.

numéro_support

Le numéro de procédure du support pour cette méthode d'indexage pour une fonction associée avec la classe d'opérateur.

nom_fonction

Le nom (pouvant être qualifié avec le nom du schéma) d'une fonction qui est la procédure de support pour la méthode d'indexage sur la classe d'opérateur.

types_argument

Le(s) type(s) de données des paramètres de la fonction.

type_stockage

Le type de données réellement stocké dans l'index. Normalement, c'est le même que le type de données de la colonne mais certaines méthodes d'indexage (uniquement GiST au moment de l'écriture de ce document) autorisent une différence. La clause STORAGE doit être omise sauf si la méthode d'indexage autorise l'utilisation d'un type différent.

Les clauses OPERATOR, FUNCTION et STORAGE pourraient apparaître dans n'importe quel ordre.

Notes

Les opérators ne devraient pas être définis par des fonctions SQL. Une fonction SQL a des chances d'être intégrée dans la requête appelante, ce qui empêchera l'optimiseur de reconnaître que la requête correspond à un index.

Exemples

La commande issue de l'exemple suivant définit une classe d'opérateur d'indexage GiST pour le type de données _int4 (tableau de int4). Voir contrib/intarray/ pour l'exemple complet.

CREATE OPERATOR CLASS gist__int_ops
    DEFAULT FOR TYPE _int4 USING gist AS
        OPERATOR        3       &&,
        OPERATOR        6       =       RECHECK,
        OPERATOR        7       @,
        OPERATOR        8       ~,
        OPERATOR        20      @@ (_int4, query_int),
        FUNCTION        1       g_int_consistent (internal, _int4, int4),
        FUNCTION        2       g_int_union (bytea, internal),
        FUNCTION        3       g_int_compress (internal),
        FUNCTION        4       g_int_decompress (internal),
        FUNCTION        5       g_int_penalty (internal, internal, internal),
        FUNCTION        6       g_int_picksplit (internal, internal),
        FUNCTION        7       g_int_same (_int4, _int4, internal);

Compatibilité

CREATE OPERATOR CLASS est une extension PostgreSQL. Il n'existe pas d'instruction CREATE OPERATOR CLASS dans le standard SQL.

Voir aussi

ALTER OPERATOR CLASS, DROP OPERATOR CLASS