如何将 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

此功能完全符合您的要求。