PostgreSQL中如何将jsonb数组转换为普通jsonb类型
PostgreSQL jsonb数组提取为独立对象操作方案
前置验证(建议先执行,避免误操作)
首先执行查询确认待修改的数据符合预期:
SELECT id, jdoc FROM api WHERE id = 4;
如果返回结果中jdoc值为[{"a": [2, 3, 4]}],即可继续后续操作。
执行更新
PostgreSQL 支持直接通过下标访问jsonb数组元素,下标从0开始计数,使用->运算符提取的结果仍为jsonb类型,无需额外转义:
UPDATE api SET jdoc = jdoc -> 0 WHERE id = 4;
结果验证
更新完成后执行查询确认修改效果:
SELECT id, jdoc FROM api WHERE id = 4;
返回的jdoc值即为预期的{"a": [2, 3, 4]}。
可选优化说明
如果需要避免数组为空时将jdoc设为null,可以给更新语句增加校验条件:
UPDATE api SET jdoc = jdoc -> 0 WHERE id = 4 AND jsonb_typeof(jdoc) = 'array' AND jsonb_array_length(jdoc) > 0;
如果需要批量处理所有符合「jdoc为仅含1个元素的jsonb数组」条件的行,调整WHERE条件即可:
UPDATE api SET jdoc = jdoc -> 0 WHERE jsonb_typeof(jdoc) = 'array' AND jsonb_array_length(jdoc) = 1;
内容的提问来源于stack exchange,提问作者jian
相关产品推荐
相关产品推荐

