SYNOPSIS

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

DESCRIPTION 描述

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

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

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

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

*
-- 和 /* 不能在操作符名字的任何地方出现, 因为它们会被认为是一个注释的开始。
*
 一个多字符的操作符名字不能以 + 或 - 结尾, 除非该名字还包含至少下面字符之一:

~ ! @ # % ^ & | ` ?

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

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

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

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

其它子句声明可选的操作符优化子句。他们的含义在 ``User-Defined Operators'' 里定义。

PARAMETERS 参数

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

funcname
 用于实现该操作符的函数。
lefttype
 如果存在的话,操作符左手边的参数类型。 如果是左目操作符,这个参数可以省略。
righttype
 如果存在的话,操作符右手边的参数类型。 如果是右目操作符,这个参数可以省略。
com_op
 该操作符对应的交换(commutator)操作符。
neg_op
 对应的负操作符。
res_proc
 此操作符约束选择性计算函数。
join_proc
 此操作符连接选择性计算函数。
HASHES
 表明此操作符支持哈希(散列)连接。
MERGES
 表明此操作符可以支持一个融合连接。
left_sort_op
 如果此操作符支持融合连接(join),此操作符的左手边数据的排序操作符。
right_sort_op
 如果此操作符支持融合连接(join),此操作符的右手边数据的排序操作符。
less_than_op
 如果这个操作符可以支持融合连接,那么这就是比较这个操作符的输入数据类型的小于操作符。
greater_than_op
 如果这个操作符不支持融合连接,那么这就是比较输入这个操作符的数据类型的大于操作符。

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

COMMUTATOR = OPERATOR(myschema.===) ,

NOTES 注意

请参阅 ``User-Defined Operators'' 中操作符章节获取更多信息。

请使用 DROP OPERATOR 从数据库中删除用户定义操作符。

EXAMPLES 例子

下面命令定义一个新操作符,面积相等,用于 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 - 定义一个新的操作符的更多相关文章

  1. CREATE OPERATOR CLASS - 定义一个新的操作符类

    SYNOPSIS CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type USING index_method AS { OPERATOR ...

  2. CREATE FUNCTION - 定义一个新函数

    SYNOPSIS CREATE [ OR REPLACE ] FUNCTION name ( [ argtype [, ...] ] ) RETURNS rettype { LANGUAGE lang ...

  3. CREATE AGGREGATE - 定义一个新的聚集函数

    SYNOPSIS CREATE AGGREGATE name ( BASETYPE = input_data_type, SFUNC = sfunc, STYPE = state_data_type ...

  4. CREATE TRIGGER - 定义一个新的触发器

    SYNOPSIS CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] } ON table [ FOR [ EACH ] { ROW | ...

  5. CREATE RULE - 定义一个新的重写规则

    SYNOPSIS CREATE [ OR REPLACE ] RULE name AS ON event TO table [ WHERE condition ] DO [ INSTEAD ] { N ...

  6. CREATE DOMAIN - 定义一个新域

    SYNOPSIS CREATE DOMAIN name [AS] data_type [ DEFAULT expression ] [ constraint [ ... ] ] where const ...

  7. CREATE TYPE - 定义一个新的数据类型

    SYNOPSIS CREATE TYPE name AS ( attribute_name data_type [, ... ] ) CREATE TYPE name ( INPUT = input_ ...

  8. CREATE SCHEMA - 定义一个新的模式

    SYNOPSIS CREATE SCHEMA schemaname [ AUTHORIZATION username ] [ schema_element [ ... ] ] CREATE SCHEM ...

  9. CREATE INDEX - 定义一个新索引

    SYNOPSIS CREATE [ UNIQUE ] INDEX name ON table [ USING method ] ( { column | ( expression ) } [ opcl ...

随机推荐

  1. leetcode 400 Add to List 400. Nth Digit

    Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Note:n is ...

  2. Android Studio3.1.0升级问题记录

    每次升级Android Studio时,一般情况下Gradle版本的也会相应的升级,我之前Android Studio 3.0.1.Gradle 是4.1升级后为:Android Studio 3.1 ...

  3. 洛谷 P1071 潜伏者 —— 模拟

    题目:https://www.luogu.org/problemnew/show/P1071 按题意模拟即可. 代码如下: #include<iostream> #include<c ...

  4. java.lang.NoSuchMethodError: org.springframework.web.context.support.XmlWebApplicationContext.getEnv

    转自:https://blog.csdn.net/u012941811/article/details/16960493 ava.lang.NoSuchMethodError: org.springf ...

  5. Ubuntu12.04中新的快捷键(转载)

    转自:http://blog.51osos.com/linuxnews/ubuntu12-04%E4%B8%AD%E6%96%B0%E7%9A%84%E5%BF%AB%E6%8D%B7%E9%94%A ...

  6. PCB CAM自动化后台配置说明

    CAM自动化项目经历9个月时间里,在我们IT团队与工程部深入合作下,依据PCB各种场景定制特定功能,且这几个月里在不断的改进与迭代脚本功能,在此期间攻破了一个又一个难题,最终项目第一阶段已顺立上线运行 ...

  7. bzoj 2839: 集合计数【容斥原理+组合数学】

    首先,考虑容斥,我们所要的答案是并集至少有\( k \)个数的方案数减去并集至少有\( k+1 \)个数的方案数加上并集至少有\( k \)个数的方案数-- 在n个数中选i个的方案数是\( C_{n} ...

  8. bzoj 2257[Jsoi2009]瓶子和燃料 数论/裴蜀定理

    题目 Description jyy就一直想着尽快回地球,可惜他飞船的燃料不够了. 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换.jyy 的飞船上共有 N个瓶子(1< ...

  9. web项目tomcat启动url自定义(去掉项目名)

    通常,使用maven构建web项目,启动时默认的访问路径: http://ip:port/项目名 很多时候我们不喜欢这样 访问,我们希望下面的访问方式: http://ip:port 如果是本地的to ...

  10. Java中关键字continue、break和return的区别

    Java中关键字continue.break和return的区别: continue:跳出本次循环继续下一次循环 break:   跳出循环体,继续执行循环外的函数体 return:   跳出整个函数 ...