Jak dołączyć / wstawić element do tablicy jsonb w PostgreSQL 12?

Sep 08 2020

Przykład:

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

Wiem już, jak dołączyć do tablicy. Na przykład:

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

To zwraca:

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

Ale nie wiem, jak wstępnie poprzedzić lub wstawić element do tablicy.

Na przykład:

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

I to powróci:

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

Ale nie ma żadnej jsonb_array_insertfunkcji. Dokumentacja pod adresemhttps://www.postgresql.org/docs/12/functions-json.html (Tabela 9.45. Dodatkowe operatory jsonb) opisuje kilka użytecznych operatorów jsonb, ale żadnego z nich nie można użyć do wstawiania / poprzedzania elementów.

Cóż, jsonb_array_elements(value->'items')może służyć do konwersji tablicy na zestaw elementów. Ale nie widzę, jak można go użyć do wstawiania / dołączania elementów do tablicy.

Mógłbym w tym celu napisać własną funkcję PL / SQL, ale musi być lepszy sposób!

Odpowiedzi

2 AkhileshMishra Sep 08 2020 at 16:25

Możesz użyć, JSONB_INSERTaby osiągnąć to, co chcesz. Proszę zapoznać się z dokumentacją .

Spróbuj w ten sposób:

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

Ta funkcja działa dokładnie zgodnie z wymaganiami.