是将额外参数传递给 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)