是将额外参数传递给 PostgreSQL 聚合的最终函数以创建特殊 TYPE 状态值的唯一方法吗?

例如。:

CREATE TYPE geomvaltext AS (
    geom public.geometry,
    val double precision,
    txt text
);

然后使用这种类型作为状态变量,让第三个参数(文本)最终到达最终函数?

为什么聚合不能将额外的参数传递给最终函数本身?任何实现原因?

所以我们可以很容易地构建,例如,采用一个方法的聚合:
SELECT ST_MyAgg(accum_number, 'COMPUTE_METHOD') FROM blablabla

谢谢

最佳答案

您可以定义具有多个参数的聚合。

我不知道这是否能解决您的问题,但您可以像这样使用它:

CREATE OR REPLACE FUNCTION myaggsfunc(integer, integer, text) RETURNS integer
   IMMUTABLE STRICT LANGUAGE sql AS
$f$
   SELECT CASE $3
           WHEN '+' THEN $1 + $2
           WHEN '*' THEN $1 * $2
           ELSE NULL
        END
$f$;

CREATE AGGREGATE myagg(integer, text) (
   SFUNC = myaggsfunc(integer, integer, text),
   STYPE = integer
);

它可以像这样使用:
CREATE TABLE mytab
   AS SELECT * FROM generate_series(1, 10) i;

SELECT myagg(i, '+') FROM mytab;

 myagg
-------
    55
(1 row)

SELECT myagg(i, '*') FROM mytab;

  myagg
---------
 3628800
(1 row)

10-08 15:51