本文介紹創建聚合函數的方法。
背景說明
Oracle中支持為自定義聚合函數開啟并行,在PolarDB O引擎中同樣是支持的,但是語法有些差異。這里介紹下PolarDB O引擎中如何創建自定義聚合函數、開啟并行。
解決方案
在PolarDB O引擎中創建自定義聚合函數的語法:
CREATE AGGREGATE name ( [ argmode ] [ argname ] arg_data_type [ , ... ] ) (
SFUNC = sfunc,
STYPE = state_data_type
[ , SSPACE = state_data_size ]
[ , FINALFUNC = ffunc ]
[ , FINALFUNC_EXTRA ]
[ , FINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ]
[ , COMBINEFUNC = combinefunc ]
[ , SERIALFUNC = serialfunc ]
[ , DESERIALFUNC = deserialfunc ]
[ , INITCOND = initial_condition ]
[ , MSFUNC = msfunc ]
[ , MINVFUNC = minvfunc ]
[ , MSTYPE = mstate_data_type ]
[ , MSSPACE = mstate_data_size ]
[ , MFINALFUNC = mffunc ]
[ , MFINALFUNC_EXTRA ]
[ , MFINALFUNC_MODIFY = { READ_ONLY | SHAREABLE | READ_WRITE } ]
[ , MINITCOND = minitial_condition ]
[ , SORTOP = sort_operator ]
[ , PARALLEL = { SAFE | RESTRICTED | UNSAFE } ]
)
示例
PolarDB O引擎中支持常規的聚合函數,如果需要實現特殊功能,您可以自定義相關函數即可(sfunc、stype、FINALFUNC)。
例如,指定符號連接聚合,同時適用于大部分場景:
create aggregate launch_concat(text,text) (
sfunc = pg_catalog.string_agg_transfn,
stype = internal,
FINALFUNC = pg_catalog.string_agg_finalfn
);
結果為:
select launch_concat(id::text, ',') from generate_series(1,10) t(id);
launch_concat
----------------------
1,2,3,4,5,6,7,8,9,10