| PostgreSQL: Das Offizielle Handbuch | ||||
|---|---|---|---|---|
| Zurück | Schnell zurück | Schnell nach vorne | Nach vorne | |
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 ]
)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:$ (Dollarzeichen) kann nicht als einzelnes Zeichen ein Operator sein. Es kann allerdings Teil eines Operatornamens aus mehreren Zeichen sein.
-- und /* können nirgendwo in einem Operatornamen auftauchen, weil sie als der Anfang eines Kommentars angenommen werden.
Ein Operatorname der aus mehreren Zeichen besteht kann nicht auf + oder - enden, es sei denn der Name enthält mindestens eins der folgenden Zeichen:
~ ! @ # % ^ & | ` ? $
So ist zum Beispiel @- ein zulässiger Operatorname, nicht aber *-. Diese Einschränkung erlaubt es PostgreSQL, Befehle, die dem SQL-Standard folgen, zu verarbeiten, ohne Leerzeichen zwischen den Tokens zu erfordern.
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.
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.
Die Funktion, die den Operator implementiert.
Der Datentyp des linken Operanden des Operators. Diese Option wird bei einem linken unären Operator ausgelassen.
Der Datentyp des rechten Operanden des Operators. Diese Option wird bei einem rechten unären Operator ausgelassen.
Der Kommutator dieses Operators.
Der Umkehrungsoperator dieses Operators.
Die Auswahlselektivitätsschätzfunktion für diesen Operator.
Die Verbundselektivitätsschätzfunktion für diesen Operator.
Gibt an, dass dieser Operator Hash-Verbunde unterstützt.
Gibt an, dass dieser Operator Merge-Verbunde unterstützt.
Wenn dieser Operator Merge-Verbunde unterstützt, dann der Kleiner-als-Operator für den Datentyp des linken Operanden.
Wenn dieser Operator Merge-Verbunde unterstützt, dann der Kleiner-als-Operator für den Datentyp des rechten Operanden.
Wenn dieser Operator Merge-Verbunde unterstützt, dann der Kleiner-als-Operator, der die Operandendatentypen dieses Operators vergleicht.
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.===)
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.
);
Der Befehl CREATE OPERATOR ist eine PostgreSQL-Erweiterung. Der SQL-Standard sieht keine benutzerdefinierten Operatoren vor.
| Zurück | Zum Anfang | Nach vorne |
| CREATE LANGUAGE | Nach oben | CREATE OPERATOR CLASS |