Postgres中如何向json类型数组追加元素(非jsonb)
向PostgreSQL JSON类型数组追加元素的实现方案
PostgreSQL原生没有为JSON类型提供JSONB那样的||拼接操作符,但可以通过内置函数或类型转换两种方式实现数组追加需求:
方法1:使用json_array_append原生函数
json_array_append是专门针对JSON类型的数组追加函数,无需额外类型转换:
- 先确保表和初始数据格式正确(注意初始值需为JSON数组格式):
CREATE TABLE OrderData ( uuid text NOT NULL PRIMARY KEY UNIQUE, info json NOT NULL ); INSERT INTO orderdata VALUES('abcd','[{"items": {"product": "Jelly","qty": 1}}]');
- 执行追加更新操作:
UPDATE orderdata SET info = json_array_append(info, '{"items": {"product": "Grape","qty": 10}}'::json) WHERE uuid = 'abcd';
- 验证更新结果:
SELECT * FROM orderdata;
方法2:转JSONB操作后转回JSON
如果习惯使用JSONB的||操作符,可以先将JSON转成JSONB完成拼接,再转回JSON类型:
UPDATE orderdata SET info = (info::jsonb || '{"items": {"product": "Grape","qty": 10}}'::jsonb)::json WHERE uuid = 'abcd';
关键注意点
- 必须保证
info字段的初始值是JSON数组(即被[]包裹)。如果初始存的是单个JSON对象,可先执行以下语句转为数组:UPDATE orderdata SET info = json_build_array(info) WHERE uuid = 'abcd' AND json_typeof(info) = 'object';
内容的提问来源于stack exchange,提问作者Rafe
相关产品推荐
相关产品推荐

