正在尝试创建聚合函数:

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)

最佳答案

LEASTGREATEST不是真正的函数;它们在内部被解析为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函数。

10-04 15:52