问题描述
示例:
drop table a;
create table a( value jsonb);
insert into a values ('{"items":[0,1,2]}'::jsonb);
select value->'items' from a;
我已经知道如何追加到数组。例如:
select jsonb_build_object('items',value->'items' || '3'::jsonb
) from a
这将返回:
{"items": [0,2,3]}
但是我不知道如何预先添加或插入元素到数组中。
例如:
select jsonb_build_object('items',jsonb_array_insert(value->'items',-1)
) from a
这将返回:
{"items": [-1,2]}
但是没有jsonb_array_insert
函数。 https://www.postgresql.org/docs/12/functions-json.html(表9.45。其他jsonb运算符)上的文档描述了一些有用的jsonb运算符,但是它们都不能用于插入/添加元素。
好吧,jsonb_array_elements(value->'items')
可用于将数组转换为一组元素。但是我不知道如何将其用于在数组中插入/添加元素。
我可以为此编写自己的PL / sql函数,但是必须有更好的方法!
解决方法
您可以使用JSONB_INSERT
实现所需的功能。请参阅documentation。
尝试一下:
select
jsonb_insert(value,'{items,0}','-1'::jsonb)
from a
此功能完全按照您的要求工作。