返回介绍

I. 教程

II. SQL 语言

III. 服务器管理

IV. 客户端接口

V. 服务器端编程

VI. 参考手册

VII. 内部

VIII. 附录

33.12. 用户定义操作符

发布于 2019-09-30 03:09:16 字数 1007 浏览 1057 评论 0 收藏 0

每个操作符都是对真正干活的对应函数的"语义修饰";所以你在创建操作符之前必须先创建对应的函数。不过,一个操作符也并不仅仅是语义修饰,因为它还带着可以帮助查询规划器优化使用该操作符的附加信息。下一节将用于解释这些附加信息。

PostgreSQL 支持左目、右目、双目操作符。操作符可以重载;也就是说,同一个操作符可以用于不同数目和类型的操作数。在执行一个查询的时候,系统从名字和提供的操作符类型上判断需要调用哪个操作符。

下面是一个创建用于两个复数相加的操作符的例子。假设已经创建了 complex(见节33.11)类型的定义。首先需要做相加工作的函数;然后就可以定义操作符:

CREATE FUNCTION complex_add(complex, complex)
    RETURNS complex
    AS 'filename', 'complex_add'
    LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR + (
    leftarg = complex,
    rightarg = complex,
    procedure = complex_add,
    commutator = +
);

现在可以执行像下面这样的查询:

SELECT (a + b) AS c FROM test_complex;

        c
-----------------
 (5.2,6.05)
 (133.42,144.95)

在这里已经演示了如何创建双目操作符。要创建单目操作符,只需要省略 leftarg 或者 rightarg 即可。只有 procedure 子句和参数(argument)子句是 CREATE OPERATOR 里需要的条目。例子里演示的 commutator 子句是一个给查询优化器的可选暗示。关于 commutator 和其它优化器提示的详细信息在下节给出。

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

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

发布评论

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