问题描述
我试图在 postgresql 上使用 json_agg 函数,但它不断抛出错误说
ERROR: function json_agg(character varying,character varying) does not exist
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
sql state: 42883"
当我试图聚合多个列但不是全部时,问题就出现了。
即
SELECT json_agg(users.*) as users
FROM users
工作正常,与单列查询相同
即
SELECT json_agg(users.id) as users FROM users
但是如果我想聚合多个列 即
SELECT json_agg(users.id,users.name,users.address) as users
FROM users
它抛出如上所示的错误,为什么?这是不可能的还是需要一些特定的语法?
解决方法
json_agg()
只需要一个参数,而不是多个参数。
如果要将整行转换为 JSON 然后聚合,请传递表引用:
SELECT json_agg(users) as users
FROM users
如果您只需要一些列,请使用 json_build_object()
SELECT json_agg(json_build_object('id',users.id,'name',users.name)) as users
FROM users
如果您想要大部分列而只排除少数列,使用 to_jsonb()
并删除不需要的列可能会更容易:
SELECT jsonb_agg((to_jsonb(users) - 'password')) as users
FROM users