返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

CREATE OPERATOR

发布于 2019-09-30 03:10:55 字数 3690 浏览 915 评论 0 收藏 0

名称

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 操作符。定义该操作符的用户将成为其所有者。如果给出了一个模式名,那么该操作符将在指定的模式中创建。否则它会在当前模式中创建。

操作符 name 是一个最多 NAMEDATALEN-1 长的(缺省为 63 个)下列字符组成的字符串:

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

你选择名字的时候有几个限制:

  • --/* 不能在操作符的任何地方出现,因为它们会被认为是一个注释的开始。

  • 一个多字符的操作符不能以 +- 结尾,除非该名字还包含至少下面字符之一:

    ~!@#%^&|`?

    例如, @- 是一个允许的操作符名,但 *- 不是。这个限制允许 PostgreSQL 分析 SQL 兼容的查询而不要求在符号之间有空白。

操作符 != 在输入时映射成 <> ,因此这两个名称总是等价的。

至少需要定义一个 LEFTARGRIGHTARG 。对于双目操作符来说,两者都需要定义。对右目操作符来说,只需要定义 LEFTARG ,而对于左目操作符来说,只需要定义 RIGHTARG

同样,funcname 过程必须已经用 CREATE FUNCTION 定义过,而且必须定义为接受正确数量的指定类型参数(一个或是两个)。

其它子句声明可选的操作符优化子句。他们的含义在节33.13里定义。

参数

name

要定义的操作符。可用的字符见上文。其名字可以用模式修饰(比如 CREATE OPERATOR myschema.+ (...))。如果没有模式,则在当前模式中创建操作符。同一个模式中的两个操作符可以有一样的名字,只要他们操作不同的数据类型。这叫做重载

funcname

用于实现该操作符的函数

lefttype

操作符左边的参数数据类型,如果存在的话。如果是左目操作符,这个参数可以省略。

righttype

操作符右边的参数数据类型,如果存在的话。如果是右目操作符,这个参数可以省略。

com_op

该操作符对应的交换操作符

neg_op

该操作符对应的负操作符

res_proc

此操作符约束选择性评估函数

join_proc

此操作符连接选择性评估函数

HASHES

表明此操作符支持 Hash 连接

MERGES

表明此操作符可以支持一个融合连接

left_sort_op

此操作符的左边数据的排序操作符(如果此操作符支持融合连接)

right_sort_op

此操作符的右边数据的排序操作符(如果此操作符支持融合连接)

less_than_op

比较这个操作符的输入数据类型的小于操作符(如果此操作符支持融合连接)

greater_than_op

比较这个操作符的输入数据类型的大于操作符(如果此操作符支持融合连接)

使用 OPERATOR() 语法在 com_op 或者其它可选参数里给出一个模式修饰的操作符名,比如:

COMMUTATOR = OPERATOR(myschema.===) ,

注意

参阅节33.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,
    SORT1 = <<<,
    SORT2 = <<<
    -- 因为给出了排序操作符,所以索引隐含地有 MERGES 。
    -- LTCMP 和 GTCMP 分别假设是 < 和 > 
);

兼容性

CREATE OPERATOR 是 PostgreSQL 扩展。SQL 标准中没有该语句。

又见

ALTER OPERATOR, CREATE OPERATOR CLASS, DROP OPERATOR

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文