CREATE OPERATOR

Name

CREATE OPERATOR -- definiert einen neuen Operator

Synopsis

CREATE OPERATOR name (
    PROCEDURE = funktionsname
    [, LEFTARG = linker_typ ] [, RIGHTARG = rechter_typ ]
    [, COMMUTATOR = kommutator_op ] [, NEGATOR = umkehrungs_op ]
    [, RESTRICT = res_funktion ] [, JOIN = join_funktion ]
    [, HASHES ] [, MERGES ]
    [, SORT1 = linker_sortier_op ] [, SORT2 = rechter_sortier_op ]
    [, LTCMP = kleiner_als_op ] [, GTCMP = größer_als_op ]
)

Beschreibung

CREATE OPERATOR definiert einen neuen Operator. Der Benutzer, der den Operator definiert, wird sein Eigentümer.

Der Operatorname ist eine Folge von bis zu NAMEDATALEN-1 (normalerweise 63) Zeichen aus der folgenden Liste:

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

Es gibt allerdings ein paar Einschränkungen für die Operatornamen:

Der Operator != wird bei der Eingabe immer in <> umgewandelt, also sind diese beiden Namen immer gleichbedeutend.

Weitere Informationen über die Erzeugung von benutzerdefinierten Operatoren erhalten Sie in Abschnitt 33.11.

Parameter

name

Der Name des zu definierenden Operators. Siehe oben für gültige Zeichen. Der Name kann eine Schemaqualifikation haben, zum Beispiel CREATE OPERATOR myschema.+ (...). Zwei Operatoren im selben Schema können den gleichen Namen haben, wenn Sie unterschiedliche Operandendatentypen haben. Das nennt sich überladen.

funktionsname

Die Funktion, die den Operator implementiert.

linker_typ

Der Datentyp des linken Operanden des Operators. Diese Option wird bei einem linken unären Operator ausgelassen.

rechter_typ

Der Datentyp des rechten Operanden des Operators. Diese Option wird bei einem rechten unären Operator ausgelassen.

kommutator_op

Der Kommutator dieses Operators.

umkehrungs_op

Der Umkehrungsoperator dieses Operators.

res_funktion

Die Auswahlselektivitätsschätzfunktion für diesen Operator.

join_funktion

Die Verbundselektivitätsschätzfunktion für diesen Operator.

HASHES

Gibt an, dass dieser Operator Hash-Verbunde unterstützt.

MERGES

Gibt an, dass dieser Operator Merge-Verbunde unterstützt.

linker_sortier_op

Wenn dieser Operator Merge-Verbunde unterstützt, dann der Kleiner-als-Operator für den Datentyp des linken Operanden.

rechter_sortier_op

Wenn dieser Operator Merge-Verbunde unterstützt, dann der Kleiner-als-Operator für den Datentyp des rechten Operanden.

kleiner_als_op

Wenn dieser Operator Merge-Verbunde unterstützt, dann der Kleiner-als-Operator, der die Operandendatentypen dieses Operators vergleicht.

größer_als_op

Wenn dieser Operator Merge-Verbunde unterstützt, dann der Größer-als-Operator, der die Operandendatentypen dieses Operators vergleicht.

Um einen schemaqualifizierten Operatorname in kommutator_op oder den anderen optionalen Argumenten zu verwenden, können Sie den OPERATOR()-Syntax, zum Beispiel

COMMUTATOR = OPERATOR(myschema.===)

Meldungen

CREATE OPERATOR

Meldung, wenn der Operator erfolgreich erzeugt wurde.

Beispiel

Der folgende Befehl definiert einen neuen Operator, Flächenvergleich, für den Datentyp box:

CREATE OPERATOR === (
    LEFTARG = box,
    RIGHTARG = box,
    PROCEDURE = area_equal_procedure,
    COMMUTATOR = ===,
    NEGATOR = !==,
    RESTRICT = area_restriction_procedure,
    JOIN = area_join_procedure,
    HASHES,
    SORT1 = <<<,
    SORT2 = <<<
    -- Da Sortieroperatoren angegeben wurden, ist MERGES impliziert.
    -- Für LTCMP und GTCMP werden < bzw. > angenommen.
);

Kompatibilität

Der Befehl CREATE OPERATOR ist eine PostgreSQL-Erweiterung. Der SQL-Standard sieht keine benutzerdefinierten Operatoren vor.

Siehe Auch

DROP OPERATOR