如何将 prepend/insert 元素放入 PostgreSQL 12 中的 jsonb 数组?
How to prepend/insert an element into a jsonb array in PostgreSQL 12?
示例:
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
这个returns:
{"items": [0, 1, 2, 3]}
但我不知道如何预置或插入一个元素到数组中。
例如:
select jsonb_build_object('items',
jsonb_array_insert(value->'items',0,-1)
) from a
这会 return:
{"items": [-1, 0, 1, 2]}
但是没有jsonb_array_insert
功能。 https://www.postgresql.org/docs/12/functions-json.html 处的文档(Table 9.45。其他 jsonb 运算符)描述了一些有用的 jsonb 运算符,但其中 none 可用于 inserting/prepending 元素。
嗯,jsonb_array_elements(value->'items')
可以用来将一个数组转换成一组元素。但我看不出它如何用于将 insert/prepend 个元素放入数组中。
我可以为此编写自己的 PL/SQL 函数,但必须有更好的方法!
您可以使用JSONB_INSERT
来实现您想要的。请参考documentation.
这样试试:
select
jsonb_insert(value,'{items,0}','-1'::jsonb)
from a
此功能完全符合您的要求。
示例:
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
这个returns:
{"items": [0, 1, 2, 3]}
但我不知道如何预置或插入一个元素到数组中。
例如:
select jsonb_build_object('items',
jsonb_array_insert(value->'items',0,-1)
) from a
这会 return:
{"items": [-1, 0, 1, 2]}
但是没有jsonb_array_insert
功能。 https://www.postgresql.org/docs/12/functions-json.html 处的文档(Table 9.45。其他 jsonb 运算符)描述了一些有用的 jsonb 运算符,但其中 none 可用于 inserting/prepending 元素。
嗯,jsonb_array_elements(value->'items')
可以用来将一个数组转换成一组元素。但我看不出它如何用于将 insert/prepend 个元素放入数组中。
我可以为此编写自己的 PL/SQL 函数,但必须有更好的方法!
您可以使用JSONB_INSERT
来实现您想要的。请参考documentation.
这样试试:
select
jsonb_insert(value,'{items,0}','-1'::jsonb)
from a
此功能完全符合您的要求。