历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.
33.11. 用户自定义操作符 #
每个操作符都是对某个完成实际工作的底层函数调用的“语法糖”;因此你必须先创建底层函数,然后才能创建操作符。然而,操作符不仅仅是语法糖,因为它还携带额外信息,帮助查询规划器优化使用该操作符的查询。下一节将专门解释这些额外信息。
PostgreSQL 支持左一元、右一元和二元操作符。操作符可以重载;也就是说,同一个操作符名可以用于不同的操作符,而这些操作符具有不同数量和类型的操作数。执行查询时,系统会根据提供的操作数数量和类型确定应调用哪个操作符。
下面是创建一个把两个复数相加的操作符的例子。我们假设已经创建过
complex 类型的定义(见第 33.10 节)。首先需要一个完成工作的函数,然后就可以定义操作符:
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 和其他优化器提示的更多细节见下一节。