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

请求排查PostgreSQL 9.6中json_object函数报错问题(Zabbix场景)

问题原因分析

这个报错的核心原因是你的PostgreSQL版本过低,不支持json_object(text[], text[])这种双数组参数的函数重载形式。

具体细节:

  • PostgreSQL在10版本才新增了json_object函数的双数组参数重载(也就是接受一个键数组和一个值数组来构建JSON对象)。
  • 如果你使用的是PostgreSQL 9.x或更早的版本,json_object只支持两种调用方式:
    1. 传入交替的键值对参数:json_object('key1', 'val1', 'key2', 'val2')
    2. 传入一个包含键值对的二维数组:json_object(array[['key1','val1'], ['key2','val2']])

你的SQL语句里用到了json_object(array_agg(name), array_agg(setting)),这正是PostgreSQL 10+才支持的双数组参数写法,低版本数据库找不到匹配的函数,所以抛出42883(函数不存在)的错误。

验证方法:

你可以在你的PostgreSQL实例里执行以下语句确认版本:

SELECT version();

如果版本号低于10.0,就完全符合这个问题的场景。

可选解决方向:

  1. 升级PostgreSQL到10或更高版本:这是最彻底的解决方案,能直接兼容模板里的SQL语句。
  2. 修改SQL适配低版本:把双数组参数的写法改成低版本支持的形式,比如用array_agg(row(name, setting))生成二维数组,再传入json_object:
    select json_build_object(
        'extensions',(select array_agg(extname) from (select extname from pg_extension order by extname) as e),
        'settings', (select json_object(array_agg(row(name, setting))) from (select name,setting from pg_settings where name != 'application_name' order by name) as s)
    );
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:47:38