Comment ajouter / ajouter un élément dans un tableau jsonb dans PostgreSQL 12?

Sep 08 2020

Exemple:

drop table a;
create table a( value jsonb);
insert into a values ('{"items":[0,1,2]}'::jsonb);
select value->'items' from a;

Je sais déjà comment ajouter à un tableau. Par exemple:

select jsonb_build_object('items', 
        value->'items' || '3'::jsonb
)  from a

Cela renvoie:

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

Mais je ne sais pas comment préprendre ou insérer un élément dans un tableau.

Par exemple:

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

Et cela reviendrait:

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

Mais il n'y a pas de jsonb_array_insertfonction. La documentation surhttps://www.postgresql.org/docs/12/functions-json.html (Tableau 9.45. Opérateurs jsonb supplémentaires) décrit quelques opérateurs jsonb utiles, mais aucun d'entre eux ne peut être utilisé pour insérer / ajouter des éléments.

Eh bien, jsonb_array_elements(value->'items')peut être utilisé pour convertir un tableau en un ensemble d'éléments. Mais je ne vois pas comment cela pourrait être utilisé pour insérer / ajouter des éléments dans le tableau.

Je pourrais éventuellement écrire ma propre fonction PL / SQL pour cela, mais il doit y avoir un meilleur moyen!

Réponses

2 AkhileshMishra Sep 08 2020 at 16:25

Vous pouvez utiliser JSONB_INSERTpour réaliser ce que vous voulez. Veuillez consulter la documentation .

Essayez-le de cette façon:

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

Cette fonction fonctionne exactement selon vos besoins.