如何解决尝试 json_agg 多列会引发错误“没有函数与给定的名称匹配...”
我试图在 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。