如何查询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
相关产品推荐
相关产品推荐

