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

PostgreSQL存储过程中获取jsonb[]数组长度报错求助

解决PostgreSQL中jsonb[]数组无法用jsonb_array_length获取长度的问题

问题根源

你搞混了两种完全不同的"数组"类型:

  • jsonb[]是PostgreSQL的原生数组类型,本质是把多个独立的jsonb对象打包成PostgreSQL数组存储;
  • jsonb_array_length()函数是专门用来计算JSON格式数组(也就是单个jsonb值,结构是[{"key":val}, ...]这种)的元素数量,它不认识PostgreSQL原生的jsonb[]类型,所以才会抛出"function jsonb_array_length(jsonb[]) does not exist"的错误。

正确解决方法

针对你的jsonb[]类型数组,用PostgreSQL原生的数组长度函数就能解决:

方法1:使用cardinality()函数(推荐,更简洁)

这个函数可以直接返回任意维度PostgreSQL数组的元素总数,一维数组的话就是元素个数:

SELECT cardinality(flexibleWorkouts) AS workout_count
FROM your_table_name;

方法2:使用array_length()函数

需要指定数组的维度(一维数组传1即可):

SELECT array_length(flexibleWorkouts, 1) AS workout_count
FROM your_table_name;

额外建议:如果应该用JSON数组而非原生数组

如果你的业务场景其实需要的是单个JSON格式的数组(比如要对数组内的JSON元素做更多JSON操作),那可以把现有的jsonb[]转换成jsonb类型的数组:

  1. 先更新数据,把原生数组转成JSON数组:
UPDATE your_table_name
SET flexibleWorkouts = array_to_json(flexibleWorkouts)::jsonb;
  1. 修改字段类型为jsonb:
ALTER TABLE your_table_name
ALTER COLUMN flexibleWorkouts TYPE jsonb;

之后就可以正常使用jsonb_array_length()了:

SELECT jsonb_array_length(flexibleWorkouts) AS workout_count
FROM your_table_name;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:57:39