CREATE OPERATOR

创建运算符—定义一个新运算符

Synopsis

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

Description

CREATE OPERATOR定义一个新运算符* name *。定义操作员的用户将成为其所有者。如果指定了架构名称,则会在指定的架构中创建运算符。否则,它将在当前架构中创建。

操作员名称是以下列表中最多NAMEDATALEN -1(默认为 63)个字符的序列:

您选择名称时有一些限制:

~ ! @ # % ^ & | ` ?

例如,@-是允许的运算符名称,而*-不是。此限制使 PostgreSQL 可以解析与 SQL 兼容的命令,而无需在标记之间使用空格。

Importing 时会将运算符!=Map 到<>,因此这两个名称始终相等。

必须定义LEFTARGRIGHTARG中的至少一个。对于二进制运算符,必须同时定义两者。对于右一元运算符,仅应定义LEFTARG,而对于左一元运算符,仅应定义RIGHTARG

CREATE OPERATOR的语法中,关键字FUNCTIONPROCEDURE是等效的,但是在任何情况下,引用的函数都必须是函数,而不是过程。关键字PROCEDURE的使用在历史上已被弃用。

其他子句指定可选的运算符优化子句。 Section 38.14中详细说明了它们的含义。

为了能够创建运算符,您必须在参数类型和返回类型上具有USAGE特权,并且在基础函数上必须具有EXECUTE特权。如果指定了换向或负运算符,则您必须拥有这些运算符。

Parameters

要在* com_op *或其他可选参数中提供模式限定的运算符名称,请使用OPERATOR()语法,例如:

COMMUTATOR = OPERATOR(myschema.===) ,

Notes

有关更多信息,请参考Section 38.13

无法在CREATE OPERATOR中指定运算符的词法优先级,因为解析器的优先级行为是固定的。有关优先级的详细信息,请参见Section 4.1.6

过时的选项SORT1SORT2LTCMPGTCMP以前用于指定与可合并合并运算符关联的排序运算符的名称。这不再是必需的,因为有关关联的运算符的信息是通过查看 B 树运算符族来找到的。如果给出了这些选项之一,则将其忽略,除非隐式设置MERGES true。

使用DROP OPERATOR从数据库中删除用户定义的运算符。使用ALTER OPERATOR修改数据库中的运算符。

Examples

以下命令为数据类型box定义了一个新的运算符 area-equality:

CREATE OPERATOR === (
    LEFTARG = box,
    RIGHTARG = box,
    FUNCTION = area_equal_function,
    COMMUTATOR = ===,
    NEGATOR = !==,
    RESTRICT = area_restriction_function,
    JOIN = area_join_function,
    HASHES, MERGES
);

Compatibility

CREATE OPERATOR是 PostgreSQL 扩展。 SQL 标准中没有针对用户定义的运算符的规定。

See Also

ALTER OPERATOR, 创建操作员班, DROP OPERATOR

上一章 首页 下一章