↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 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.4 已结束支持。 请参阅 当前版本手册.

34.12. 用户定义操作符 #

每个操作符都是对执行实际工作的底层函数调用的一种“语法糖”;因此,你必须先创建底层函数,才能创建操作符。不过,操作符并不仅仅是语法糖,因为它还携带一些额外信息,可帮助查询规划器优化使用该操作符的查询。下一节将专门解释这些附加信息。

PostgreSQL支持左一元、右一元和二元操作符。操作符可以被重载;也就是说,同一个操作符名可以用于不同的操作符,而这些操作符具有不同数量和类型的操作数。执行查询时,系统会根据提供的操作数数量和类型确定应调用哪个操作符。

下面是创建一个用于将两个复数相加的操作符的示例。假定我们已经创建了类型complex的定义(见第 34.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 子句和参数子句是 CREATE OPERATOR 中唯一必需的项。示例中出现的 commutator 子句,则是给查询优化器的一个可选提示。关于 commutator 以及其他优化器提示的更多细节,会在下一节说明。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.