正在尝试创建聚合函数:
create aggregate min (my_type) (
sfunc = least,
stype = my_type
);
ERROR: syntax error at or near "least"
LINE 2: sfunc = least,
^
我错过了什么?
Although the manual calls
least
a function:最大值和最小值函数从任意数量的表达式列表中选择最大值或最小值。
我找不到:
\dfS least
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+------+------------------+---------------------+------
(0 rows)
最佳答案
LEAST
和GREATEST
不是真正的函数;它们在内部被解析为MinMaxExpr
(参见src/include/nodes/primnodes.h
)。
使用这样的通用函数可以实现所需的功能:
CREATE FUNCTION my_least(anyelement, anyelement) RETURNS anyelement
LANGUAGE sql IMMUTABLE CALLED ON NULL INPUT
AS 'SELECT LEAST($1, $2)';
(感谢Erwin Brandstetter的
CALLED ON NULL INPUT
和使用LEAST
的想法)然后可以创建聚合为
CREATE AGGREGATE min(my_type) (sfunc = my_least, stype = my_type);
只有当存在
my_type
的比较函数时,这才起作用,否则必须使用不同的my_least
函数。