↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 8.1 已于 2010 年 11 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

CREATE OPERATOR

CREATE OPERATOR — 定义一个新的操作符

大纲

CREATE OPERATOR name (
    PROCEDURE = funcname
    [, LEFTARG = lefttype ] [, RIGHTARG = righttype ]
    [, COMMUTATOR = com_op ] [, NEGATOR = neg_op ]
    [, RESTRICT = res_proc ] [, JOIN = join_proc ]
    [, HASHES ] [, MERGES ]
    [, SORT1 = left_sort_op ] [, SORT2 = right_sort_op ]
    [, LTCMP = less_than_op ] [, GTCMP = greater_than_op ]
)

描述

CREATE OPERATOR定义一个新的操作符 name。定义该操作符 的用户将成为其拥有者。如果给出了模式名,该操作符将在指定的模式中创建; 否则将在当前模式中创建。

操作符名称是一个字符序列,最多包含 NAMEDATALEN-1 个字符(默认为 63 个),字符取自以下列表:

+ - * / < > = ~ ! @ # % ^ & | ` ?

名称的选择有以下几项限制:

  • --和/*不能出现在操作符名称的 任何位置,因为它们会被视为注释的开始。

  • 多字符操作符名称不能以+或- 结尾,除非该名称中还至少包含下列字符之一:

    ~ ! @ # % ^ & | ` ?

    例如,@-是允许的操作符名称,而 *-则不允许。这一限制使 PostgreSQL能够在不要求记号之间必须有空格 的情况下解析符合 SQL 规范的命令。

输入!=时会被映射为<>, 因此这两个名称始终等效。

必须至少定义LEFTARG和RIGHTARG中的一个。对于二元操作符,必须同时定义两者。对于右一元操作符,只应定义LEFTARG;对于左一元操作符,只应定义RIGHTARG。

funcname过程必须事先已用CREATE FUNCTION定义,并且其定义必须接受正确数量(一个或两个)的指定类型参数。

其他子句用于指定可选的操作符优化属性。其含义详见 第 32.13 节。

参数

name

要定义的操作符名称。允许使用的字符请见上文。该名称可以带模式限定, 例如CREATE OPERATOR myschema.+ (...)。如果不带 模式限定,该操作符将在当前模式中创建。同一模式中的两个操作符如果 针对不同的数据类型进行操作,可以具有相同的名称。这被称为 重载。

funcname

用于实现该操作符的函数。

lefttype

该操作符左操作数的数据类型(如果有)。对于左一元操作符,应省略此选项。

righttype

该操作符右操作数的数据类型(如果有)。对于右一元操作符,应省略此选项。

com_op

该操作符的交换子。

neg_op

该操作符的求反器。

res_proc

该操作符的限制选择度估计函数。

join_proc

该操作符的连接选择度估算函数。

HASHES

表示该操作符可以支持哈希连接。

MERGES

表示该操作符可以支持归并连接。

left_sort_op

如果该操作符可以支持归并连接,则为对该操作符左手数据类型排序的小于操作符。

right_sort_op

如果该操作符可以支持归并连接,则为对该操作符右手数据类型排序的小于操作符。

less_than_op

如果该操作符可以支持归并连接,则为比较该操作符输入数据类型的小于操作符。

greater_than_op

如果该操作符可以支持归并连接,则为比较该操作符输入数据类型的大于操作符。

要在com_op或其他可选参数中给出带模式限定 的操作符名称,请使用OPERATOR()语法,例如:

COMMUTATOR = OPERATOR(myschema.===) ,

注解

更多信息请参见第 32.12 节。

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

示例

以下命令定义一个新的面积相等操作符,适用的数据类型为 box:

CREATE OPERATOR === (
    LEFTARG = box,
    RIGHTARG = box,
    PROCEDURE = area_equal_procedure,
    COMMUTATOR = ===,
    NEGATOR = !==,
    RESTRICT = area_restriction_procedure,
    JOIN = area_join_procedure,
    HASHES, MERGES
);

兼容性

CREATE OPERATOR是 PostgreSQL扩展。在 SQL 标准中没有用户定义操作符的规定。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。