每个运算符都是 “语法糖”,它调用底层函数来完成实际工作;因此,您必须先创建底层函数,然后才能创建运算符。但是,运算符 不仅仅是 语法糖,因为它还包含其他信息,可以帮助查询规划器优化使用该运算符的查询。下一部分将专门解释这些附加信息。
PostgreSQL 支持前缀和中缀运算符。运算符可以重载; 也就是说,相同的运算符名称可以用于不同的运算符,这些运算符具有不同的操作数数量和类型。当执行查询时,系统会根据提供的操作数的数量和类型确定要调用的运算符。
以下是如何为两个复数相加创建运算符的示例。我们假设我们已经创建了类型 complex
的定义(请参见 第 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
和其他优化器提示的更多详细信息,请参见下一节。
如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表格 报告文档问题。