每个操作符都是对执行实际工作的底层函数调用的一种“语法糖”;因此, 你必须先创建底层函数,才能创建操作符。不过,操作符并不仅仅是 语法糖,因为它还携带一些额外信息,可帮助查询规划器优化使用该操作符的查 询。下一节将专门解释这些附加信息。
PostgreSQL支持前缀操作符和中缀操作符。操作 符可以被重载; 也就是说,同一个操作符名可以用于不同的操作符,而这些操作符具有不同数量 和类型的操作数。执行查询时,系统会根据提供的操作数数量和类型确定应调用 哪个操作符。
下面是为两个复数相加创建一个操作符的示例。我们假设已经创建了 complex类型的定义(见Section 36.13)。首先需要 一个完成实际工作的函数,然后才能定义该操作符:
CREATE FUNCTION complex_add(complex, complex)
RETURNS complex
AS 'filename', 'complex_add'
LANGUAGE C IMMUTABLE STRICT;
CREATE OPERATOR + (
leftarg = complex,
rightarg = complex,
function = complex_add,
commutator = +
);
现在我们就可以执行下面这样的查询:
SELECT (a + b) AS c FROM test_complex;
c
-----------------
(5.2,6.05)
(133.42,144.95)
上面展示了如何创建一个二元操作符。要创建前缀操作符,只需省略 leftarg。在 CREATE OPERATOR 中, function 子句和参数子句是唯一必需的项。示例中出现的 commutator 子句,则是给查询优化器的一个可选提示。关于 commutator 以及其他优化器提示的更多细节,会在下一节说 明。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。