PostgreSQL 8.2.3 中文文档
后退快退章33. 扩展 SQL快进前进

33.12. 用户定义操作符

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

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 和其它优化器提示的详细信息在下节给出。


后退首页前进
用户定义类型上一级操作符优化信息