【问题标题】:How to prepend/insert an element into a jsonb array in PostgreSQL 12?如何在 PostgreSQL 12 中将元素添加/插入到 jsonb 数组中?
【发布时间】:2020-12-26 14:05:41
【问题描述】:

例子:

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, 1, 2, 3]}

但我不知道如何preprend插入一个元素到数组中。

例如:

select jsonb_build_object('items', 
        jsonb_array_insert(value->'items',0,-1)
)  from a

这会返回:

{"items": [-1, 0, 1, 2]}

但是没有jsonb_array_insert 功能。 https://www.postgresql.org/docs/12/functions-json.html 的文档(表 9.45. Additional jsonb Operators )描述了一些有用的 jsonb 运算符,但它们都不能用于插入/前置元素。

好吧,jsonb_array_elements(value->'items') 可用于将数组转换为一组元素。但我看不出它如何用于将元素插入/前置到数组中。

我可以为此编写自己的 PL/SQL 函数,但一定有更好的方法!

【问题讨论】:

    标签: arrays postgresql jsonb


    【解决方案1】:

    您可以使用JSONB_INSERT 来实现您想要的。请参考documentation

    试试这个方法:

    select 
    jsonb_insert(value,'{items,0}','-1'::jsonb)
    from a
    

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

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 2017-03-17
      • 2015-08-20
      • 1970-01-01
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多