如何通过PostgreSQL视图/函数获取ID数组并适配Postgrest输出
实现Postgrest返回纯值数组的方法
你可以通过两种方式实现需求:利用聚合函数创建视图,或者创建返回数组类型的SQL函数,后者能更直接地让Postgrest返回纯JSON数组。
方法1:创建返回数组的视图
先修正原视图的语法错误,使用array_agg聚合所有去重后的值为一个数组:
CREATE VIEW api.value_list AS SELECT array_agg(DISTINCT value ORDER BY value) AS values FROM db.table;
查询该视图时,通过Postgrest的single参数提取数组:
GET /api/value_list?select=values&single
此时响应会是:
["xyz", "zyx"]
方法2:创建返回数组类型的SQL函数
这种方式更直接,函数直接返回数组类型,Postgrest调用时会直接输出纯JSON数组:
CREATE OR REPLACE FUNCTION api.get_values() RETURNS text[] AS $$ -- 若value字段为其他类型,替换成对应数组类型(如int[]) SELECT array_agg(DISTINCT value ORDER BY value) FROM db.table; $$ LANGUAGE sql STABLE;
通过Postgrest调用该函数:
GET /rpc/get_values
就能得到你想要的纯数组响应:
["xyz", "zyx"]
关键说明
原视图返回的是多行单列数据,Postgrest会自动将每行转换为包含字段名的JSON对象;而聚合后的数组是单行单列的数组值,或者函数直接返回数组类型,Postgrest会将其序列化为纯JSON数组。
内容的提问来源于stack exchange,提问作者Seb Heron
相关产品推荐
相关产品推荐

