Postgresql 删除数组中的元素
extra为 {“a”: [null, 3, null],“b”: 111} 使用sql 将extra中a中的null移除
第一步:
首先先把[null, 3, null]
移除,
select json_agg(elem) filter ( where elem != 'null' )
from (select jsonb_array_elements('[null,3,null]'::jsonb) as elem) t;
这将得到[3]
- jsonb_array_elements 会展开 extra 中 a 数组的每个元素。
- filter ( where elem != ‘null’ ) 用于过滤掉 null。
- 使用 jsonb_agg 将非 null 的值重新聚合为一个数组。
第二步:
使用jsonb_set
更新数据
update table_name
SET extra = jsonb_set(extra::jsonb, '{a}', (select json_agg(elem)
from jsonb_array_elements((extra -> 'a')::jsonb) as elem
where elem != 'null')::jsonb)
where extra::jsonb ? 'a';
更多json用法:
http://www.postgres.cn/docs/12/functions-json.html