如何在PostgreSQL 12中将元素前置/插入jsonb数组中?

问题描述

示例:

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

此功能完全按照您的要求工作。