PostgreSQL中如何向JSON类型数组追加元素?
PostgreSQL JSON数组追加元素的解决方法
你的问题核心是:PostgreSQL的||数组连接运算符仅支持jsonb类型,而你的friends字段是json类型,因此直接使用会报错;json类型本身也没有内置的||运算符支持。
以下是两种可行的解决方法:
方法一:临时转换为jsonb类型操作
将原json字段转换为jsonb,使用||连接数组后再转回json:
UPDATE profile SET friends = (friends::jsonb || '["Alice"]'::jsonb)::json WHERE username = 'David';
如果是追加单个元素,用jsonb_build_array构造单个元素的数组更直观:
UPDATE profile SET friends = (friends::jsonb || jsonb_build_array('Alice'))::json WHERE username = 'David';
方法二:使用JSON专用函数json_array_append
PostgreSQL提供了直接操作json数组的json_array_append函数,无需转换类型:
UPDATE profile SET friends = json_array_append(friends, '"Alice"') WHERE username = 'David';
或者用to_json生成标准JSON值,避免手动加引号的麻烦:
UPDATE profile SET friends = json_array_append(friends, to_json('Alice'::text)) WHERE username = 'David';
额外建议
如果后续需要频繁操作JSON数组,建议直接将friends字段的类型修改为jsonb,这样可以直接使用||等便捷运算符,同时jsonb类型在查询和修改的性能上更优。
内容的提问来源于stack exchange,提问作者Null Salad
相关产品推荐
相关产品推荐

