Documentation PostgreSQL 8.0.25 | ||||
---|---|---|---|---|
Précédent | Arrière rapide | Avance rapide | Suivant |
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 } [, ... ]
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.
Le nom de la classe d'opérateur à créer. Ce nom pourrait être qualifié avec le nom du schéma.
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.
Le type de données de la colonne pour cette classe d'opérateur.
Le nom de la méthode d'indexage pour cette classe d'opérateur.
Le numéro de stratégie de la méthode d'indexage pour un opérateur associé avec la classe d'opérateur.
Le nom (pouvant être qualifié du nom du schéma) d'un opérateur associé avec la classe d'opérateur.
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.
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.
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.
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.
Le(s) type(s) de données des paramètres de la fonction.
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.
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.
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);
CREATE OPERATOR CLASS est une extension PostgreSQL. Il n'existe pas d'instruction CREATE OPERATOR CLASS dans le standard SQL.
Précédent | Sommaire | Suivant |
CREATE OPERATOR | Niveau supérieur | CREATE RULE |