CREATE OPERATOR CLASS

Name

CREATE OPERATOR CLASS -- definiert eine neue Operatorklasse für Indexe

Synopsis

CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE datentyp USING indexmethode AS
  {  OPERATOR strategienummer operatorname [ ( optyp, op_type ) ] [ RECHECK ]
   | FUNCTION unterst_nummer funktionsname ( argumenttyp [, ...] )
   | STORAGE storage_typ
  } [, ... ]

Beschreibung

CREATE OPERATOR CLASS erzeugt eine neue Operatorklasse. Eine Operatorklasse definiert, wie ein bestimmter Datentyp mit einem Index verwendet werden kann. Die Operatorklasse gibt an, dass bestimmte Operatoren für diesen Datentyp und diese Indexmethode bestimmte Rollen oder „Strategien“ ausfüllen. Die Operatorklasse gibt auch die von der Indexmethode mit diesem Datentyp verwendeten Unterstützungsprozeduren an. Alle von einer Operatorklasse verwendeten Operatoren und Funktionen müssen definiert sein, bevor die Operatorklasse erzeugt werden kann.

Wenn ein Schemaname angegeben wurde (zum Beispiel CREATE OPERATOR CLASS mein_schema.meine_opklasse ...), dann wird die Operatorklasse im angegebenen Schema erzeugt, ansonsten wird sie im aktuellen Schema erzeugt. Zwei Operatorklassen im selben Schema können nur den gleichen Namen haben, wenn sie für verschiedene Indexmethoden sind.

Der Benutzer, der die Operatorklasse definiert, wird ihr Eigentümer. Gegenwärtig muss der erzeugende Benutzer ein Superuser sein. (Diese Einschränkung besteht, weil eine fehlerhafte Operatorklassendefinition den Server verwirren oder gar zum Absturz bringen kann.)

CREATE OPERATOR CLASS prüft gegenwärtig nicht, ob die Operatorklassendefinition alle von der Indexmethode benötigten Operatoren und Funktionen enthält. Es liegt in der Verantwortung des Benutzers, eine gültige Operatorklasse zu definieren.

Weitere Informationen über Operatorklassen finden Sie in Abschnitt 33.14.

Parameter

name

Der Name der zu erzeugenden Operatorklasse. Der Name kann eine Schemaqualifikation haben.

DEFAULT

Wenn angegeben, dann wird die Operatorklasse die Standardoperatorklasse für ihren Datentyp. Höchstens eine Operatorklasse kann für einen bestimmten Datentyp und eine Indexmethode die Standardoperatorklasse sein.

datentyp

Der Datentyp, für den diese Operatorklasse gilt.

indexmethode

Der Name der Indexmethode, für die diese Operatorklasse gilt.

strategienummer

Die Strategienummer der Indexmethode für einen zur Operatorklasse gehörenden Operator.

operatorname

Der Name eines zur Operatorklasse gehörenden Operators (möglicherweise mit Schemaqualifikation).

op_typ

Die Operandendatentypen eines Operators, oder NONE bei einem linken unären oder rechten unären Operator. Die Operandendatentypen können normalerweise weggelassen werden, wenn sie die selben sind wie der Datentyp der Operatorklasse.

RECHECK

Wenn angegeben, dann ist der Index für diesen Operator „verlustbehaftet“, das heißt, dass Zeilen, die mit diesem Index ermittelt wurden, noch einmal geprüft werden müssen, ob sie die Bedingungsklausel mit diesem Operator wirklich erfüllen.

unterst_nummer

Die Unterstützungsprozedurnummer der Indexmethode für eine zur Operatorklasse gehörenden Funktion.

funktionsname

Der Name einer Funktion (möglicherweise mit Schemaqualifikation), die eine Unterstützungsprozedur in der Operatorklasse ist.

argumenttyp

Die Argumentdatentypen der Funktion.

storage_typ

Der tatsächlich im Index gespeicherte Datentyp. Normalerweise ist das der selbe wie der Spaltendatentyp, aber bei einigen Indexmethoden (gegenwärtig nur GiST) kann er unterschiedlich sein. Die STORAGE-Klausel muss weggelassen werden, wenn die Indexmethode die Angabe eines anderen Typs nicht unterstützt.

Die Klauseln OPERATOR, FUNCTION und STORAGE können in beliebiger Reihenfolge erscheinen.

Meldungen

CREATE OPERATOR CLASS

Meldung, wenn die Operatorklasse erfolgreich erzeugt wurde.

Beispiel

Der folgende Beispielbefehl definiert eine GiST-Index-Operatorklasse für den Datentyp _int4 (Array aus int4). Siehe in contrib/intarray/ für das vollständige Beispiel.

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);

Kompatibilität

Der Befehl CREATE OPERATOR CLASS ist eine PostgreSQL-Erweiterung.

Siehe Auch

DROP OPERATOR CLASS