CREAR OPERADOR: definir un nuevo operador
Sinopsis
CREATE OPERATOR name ( {FUNCTION|PROCEDURE} = function_name [, LEFTARG = left_type ] [, RIGHTARG = right_type ] [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ] [, RESTRICT = res_proc ] [, JOIN = join_proc ] [, HASHES ] [, MERGES ] )
Descripción
CREATE OPERATOR
define un nuevo operador, name
. El usuario que define un operador se convierte en su propietario. Si se proporciona un nombre de esquema, el operador se crea en el esquema especificado. De lo contrario, se crea en el esquema actual.
El nombre del operador es una secuencia de hasta NAMEDATALEN
-1 (63 por defecto) caracteres de la siguiente lista:
+ – * / <> = ~! @ #% ^ & | `?
Existen algunas restricciones sobre la elección del nombre:
-
--
y/*
no pueden aparecer en ninguna parte del nombre de un operador, ya que se tomarán como el comienzo de un comentario. -
Un nombre de operador de varios caracteres no puede terminar en
+
o-
, a menos que el nombre también contenga al menos uno de estos caracteres:~! @ #% ^ & | ‘?
Por ejemplo,
@-
es un nombre de operador permitido, pero*-
no es. Esta restricción permite a PostgreSQL analizar comandos compatibles con SQL sin necesidad de espacios entre tokens. -
El uso de
=>
ya que el nombre de un operador está en desuso. Es posible que no se permita por completo en una versión futura.
El operador !=
está mapeado a <>
en la entrada, por lo que estos dos nombres son siempre equivalentes.
Al menos uno de LEFTARG
y RIGHTARG
debe ser definido. Para los operadores binarios, ambos deben estar definidos. Para operadores unarios derechos, solo LEFTARG
debe definirse, mientras que para los operadores unarios izquierdos solo RIGHTARG
debe definirse.
Nota
Los operadores unario derecho, también llamados sufijo, están obsoletos y se eliminarán en la versión 14 de PostgreSQL.
los function_name
la función debe haber sido definida previamente usando CREATE FUNCTION
y debe definirse para aceptar el número correcto de argumentos (uno o dos) de los tipos indicados.
En la sintaxis de CREATE OPERATOR
, las palabras clave FUNCTION
y PROCEDURE
son equivalentes, pero la función referenciada debe ser en cualquier caso una función, no un procedimiento. El uso de la palabra clave PROCEDURE
aquí es histórico y obsoleto.
Las otras cláusulas especifican cláusulas opcionales de optimización del operador. Su significado se detalla en Sección 37.15.
Para poder crear un operador, debe tener USAGE
privilegio sobre los tipos de argumentos y el tipo de retorno, así como EXECUTE
privilegio sobre la función subyacente. Si se especifica un operador de conmutador o negador, debe poseer estos operadores.
Parámetros
name
-
El nombre del operador que se va a definir. Consulte más arriba para conocer los caracteres permitidos. El nombre puede estar calificado por esquema, por ejemplo
CREATE OPERATOR myschema.+ (...)
. De lo contrario, el operador se crea en el esquema actual. Dos operadores en el mismo esquema pueden tener el mismo nombre si operan en diferentes tipos de datos. Se llama sobrecarga. function_name
-
La función utilizada para implementar este operador.
left_type
-
El tipo de datos del operando izquierdo del operador, si lo hay. Esta opción se omitiría para un operador unario a la izquierda.
right_type
-
El tipo de datos del operando derecho del operador, si lo hay. Esta opción se omitiría para un operador unario a la derecha.
com_op
-
El conmutador de este operador.
neg_op
-
El negador de este operador.
res_proc
-
La función de estimador de selectividad de restricción para este operador.
join_proc
-
La función de estimador de selectividad de unión para este operador.
HASHES
-
Indica que este operador puede admitir una combinación hash.
MERGES
-
Indica que este operador puede admitir una combinación de combinación.
Para dar un nombre de operador calificado por esquema en com_op
o los otros argumentos opcionales, use el OPERATOR()
sintaxis, por ejemplo:
COMMUTATOR = OPERATOR(myschema.===) ,
Notas
Referirse a Sección 37.14 para mayor información.
No es posible especificar la precedencia léxica de un operador en CREATE OPERATOR
, porque el comportamiento de precedencia del analizador está cableado. Consulte la Sección 4.1.6 para obtener detalles sobre la precedencia.
Las opciones obsoletas SORT1
, SORT2
, LTCMP
, y GTCMP
se usaban anteriormente para especificar los nombres de los operadores de ordenación asociados con un operador que se puede unir por combinación. Esto ya no es necesario, ya que la información sobre los operadores asociados se encuentra en cambio en las familias de operadores del árbol B. Si se da una de estas opciones, se ignora, excepto para establecer implícitamente MERGES
verdadero.
Utilice DROP OPERATOR para eliminar operadores definidos por el usuario de una base de datos. Utilice ALTER OPERATOR para modificar operadores en una base de datos.
Ejemplos de
El siguiente comando define un nuevo operador, igualdad de área, para el tipo de datos box
:
CREATE OPERATOR === ( LEFTARG = box, RIGHTARG = box, FUNCTION = area_equal_function, COMMUTATOR = ===, NEGATOR = !==, RESTRICT = area_restriction_function, JOIN = area_join_function, HASHES, MERGES );
Compatibilidad
CREATE OPERATOR
es una extensión de PostgreSQL. No existen disposiciones para los operadores definidos por el usuario en el estándar SQL.
Ver también
ALTERAR OPERADOR, CREAR CLASE DE OPERADOR, SOLTAR OPERADOR
Anterior |
Hasta | próximo |
CREAR VISTA MATERIALIZADA | Hogar | CREAR CLASE DE OPERADOR |