Postgresql 中文操作指南
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)个字符的序列:
+ - * / < > = ~ ! @ # % ^ & | ` ?
对于你的姓名选择有一些限制:
~ ! @ # % ^ & | ` ?
在输入中,操作符 != 映射到 <> ,所以这两个名称总是等效的。
对于二元操作符, LEFTARG 和 RIGHTARG 必须都已定义。对于前缀操作符,仅 RIGHTARG 应该已定义。 function_name 函数必须已经使用 CREATE FUNCTION 进行了定义,且必须定义为接受指定类型的正确数量(一或两个)的参数。
在 CREATE OPERATOR 语法中,关键字 FUNCTION 和 PROCEDURE 是等效的,但是引用的函数必须在任何情况下都是函数,而不是过程。这里使用关键字 PROCEDURE 是历史遗留,已被弃用。
其他子句指定可选操作符优化子句。它们的含义在 Section 38.15 中有详细说明。
若要能够创建操作符,你必须具有对参数类型和返回类型的 USAGE 权限,以及对基础函数的 EXECUTE 权限。如果指定了交换器或否定器操作符,你必须拥有这些操作符。
Parameters
-
name
-
要定义的操作符的名称。请参阅上面允许的字符。该名称可以是模式限定的,例如 CREATE OPERATOR myschema.+ (…​) 。如果不是,则该操作符将在当前模式中创建。同一个模式中的两个操作符如果在不同的数据类型上操作,则可以有相同的名称。这称为 overloading 。
-
-
function_name
-
用于实现此操作符的函数。
-
-
left_type
-
操作符左操作数的数据类型(如果存在)。对于前缀操作符,将省略此选项。
-
-
right_type
-
运算符右操作数的数据类型。
-
-
com_op
-
此操作符的交换器。
-
-
neg_op
-
此操作符的否定器。
-
-
res_proc
-
此操作符的限制性可选择性估计器函数。
-
-
join_proc
-
此操作符的联接可选择性估计器函数。
-
-
HASHES
-
指示此操作符可以支持哈希联接。
-
-
MERGES
-
指示此操作符可以支持合并联接。
-
要在 com_op 或其他可选参数中给出模式限定的操作符名称,请使用 OPERATOR() 语法,例如:
COMMUTATOR = OPERATOR(myschema.===) ,
Notes
有关其他信息,请参阅 Section 38.14 。
无法在 CREATE OPERATOR 中指定操作符的词法优先级,因为解析器的优先级行为是硬编码的。有关优先级详情,请参阅 Section 4.1.6 。
过时的选项 SORT1 、 SORT2 、 LTCMP 和 GTCMP 以前用于指定与可合并联接操作符关联的排序操作符的名称。现在这不再需要,因为有关关联操作符的信息是通过查看 B 树操作符族来查找的。如果给出了其中一个选项,除了隐式设置 MERGES 为 true 之外,它将被忽略。
使用 ALTER OPERATOR 在数据库中删除用户自定义运算符。使用 DROP OPERATOR 修改数据库中的运算符。
Examples
以下命令为数据类型 ALTER OPERATOR 定义了一个新运算符,area-equality:
CREATE OPERATOR === (
LEFTARG = box,
RIGHTARG = box,
FUNCTION = area_equal_function,
COMMUTATOR = ===,
NEGATOR = !==,
RESTRICT = area_restriction_function,
JOIN = area_join_function,
HASHES, MERGES
);
See Also
CREATE OPERATOR , ALTER OPERATOR , CREATE OPERATOR CLASS