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