Postgres 的 string_agg(expr, delimiter) 函数很棒。但我希望有一个版本,它采用单个参数 - 要聚合的字段 - 并假设分隔符为 ', ',因为这是我想要的 9 次(10 次)。使用非聚合函数,我可以只需这样做:
create or replace function public.string_agg(text)
returns text
as $$
select string_agg($1, ', ');
$$ language sql
immutable;
但是由于 string_agg 是一个聚合函数,所以这是行不通的。它抱怨我传递给它的字段需要在 GROUP BY 子句中,这告诉我查询引擎不明白我的包装器是一个聚合函数。
我查看了用户定义聚合的文档(http://www.postgresql.org/docs/9.1/static/xaggr.html 和http://www.postgresql.org/docs/9.1/static/sql-createaggregate .html ),但对我来说如何使用现有的 string_agg(text, text) 定义我的新 string_agg(text) 并不明显。看来我必须从头开始定义我的新函数,这比我想承担的要复杂得多,而且我也不完全相信我可以完美地反映内置 string_agg 的行为。
那么是否有一些技术可以创建一个比我没有看到的简单包装器?还是我必须做更多的工作?