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

如何查询JSONB数组大小并用于PLPGSQL的FOR循环?

正确获取PostgreSQL JSONB数组长度的方法

出现这个错误是因为json_array_length()仅支持json类型参数,而你传入的是jsonb类型。针对JSONB数组,PostgreSQL提供了专门的处理方式,以下是两种可行方案:

方案一:使用jsonb_array_length()函数

直接将原代码中的json_array_length()替换为jsonb_array_length(),这是PostgreSQL为JSONB类型数组量身打造的长度获取函数。修改后的代码如下:

DO 
$$
DECLARE 
    p_obj JSONB;
    array_size INT;
BEGIN
    p_obj = '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::jsonb;
    array_size = jsonb_array_length(p_obj);

    RAISE NOTICE '%', p_obj;
    RAISE NOTICE '数组长度:%', array_size;
END;
$$ LANGUAGE PLPGSQL;

执行后会正确输出数组长度3。

方案二:直接遍历JSONB数组(无需预先获取长度)

如果你的最终目的是在FOR循环中遍历数组元素,完全可以跳过获取长度的步骤,直接使用jsonb_array_elements()函数展开数组,示例代码如下:

DO 
$$
DECLARE 
    p_obj JSONB;
    elem JSONB;
BEGIN
    p_obj = '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::jsonb;
    
    -- 直接遍历数组元素
    FOR elem IN SELECT jsonb_array_elements(p_obj) LOOP
        RAISE NOTICE '当前元素:%', elem;
    END LOOP;
END;
$$ LANGUAGE PLPGSQL;

这种方式更直接,不需要额外维护数组长度变量,很适合循环遍历的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:35:01