You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使PostgREST自定义函数返回扁平数组而非键值对结构?

解决PostgREST自定义函数返回扁平值数组的问题

你想把当前返回嵌套对象数组的PostgREST函数改成直接输出扁平字符串数组?这个调整其实很简单,核心是修改函数的返回类型和查询逻辑,让PostgREST直接输出数组而非行集合。

问题根源

你当前的函数定义returns table(substance text)意味着返回的是一组行,每行包含一个substance字段。PostgREST默认会把每行序列化成键值对对象,所以最终得到[{substance: "xxx"}, ...]这样的结构。

解决方案:修改函数返回标量数组

我们可以把函数的返回类型改成text[](文本数组),并用array_agg()聚合查询结果,直接生成扁平数组:

create or replace function api.substances(substance_group text) returns text[] as $$
select array_agg(distinct api.emissions.substance order by api.emissions.substance)
from api.emissions
where api.emissions.substance_group = $1;
$$ language sql;

关键调整细节:

  • 返回类型变更:从returns table(substance text)改为returns text[],明确告诉PostgREST我们要返回一个数组而非行集合。
  • array_agg()聚合:这个函数会把查询到的所有substance值收集到一个数组里,distinct保证结果去重(和你原来的group by效果一致),order by还能让数组内的值有序(可选但推荐)。
  • 移除多余group by:因为array_agg()已经完成了聚合操作,不需要再按substance分组,这样查询效率更高。

效果验证

调用修改后的函数后,PostgREST会直接返回你期望的扁平数组:

["Arseen", "Benzo[b]fluorantheen", ...]

这样就不用在客户端额外处理数据结构了,完美匹配你的需求!

内容的提问来源于stack exchange,提问作者Hoetmaaiers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:12:45