# 38.14.用户定义运算符
每个操作符都是对执行实际工作的底层函数的调用的“语法糖”;因此,必须先创建基础函数,然后才能创建运算符。然而,一名操作员正在不仅仅是语法糖,因为它携带了额外的信息,可以帮助查询规划者优化使用运算符的查询。下一节将专门解释这些附加信息。
PostgreSQL支持前缀和中缀运算符。操作员可能超载;也就是说,相同的运算符名称可用于具有不同操作数和类型的不同运算符。执行查询时,系统根据提供的操作数的数量和类型确定要调用的运算符。
下面是创建两个复数相加运算符的示例。我们假设已经创建了类型的定义复杂的
(见第38.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