update field in jsonb

Started by support-tigerover 8 years ago6 messagesgeneral
Jump to latest
#1support-tiger
support@tigernassau.com

is there a way to update a single field in jsonb without replacing the
entire json document - couldn't find an example

for example

create table test (id primary key, data jsonb);

insert into test ({"name":"bill", "age":29});

 ?? update test   set data->age = 30

--
Support Dept
Tiger Nassau, Inc.
www.tigernassau.com
406-624-9310

#2Ivan E. Panchenko
i.panchenko@postgrespro.ru
In reply to: support-tiger (#1)
Re: update field in jsonb

23.11.2017 04:45, support-tiger пишет:

is there a way to update a single field in jsonb without replacing the
entire json document - couldn't find an example

for example

create table test (id primary key, data jsonb);

insert into test ({"name":"bill", "age":29});

 ?? update test   set data->age = 30

When a record in PostgeSQL is UPDATEd, its new version is created. So
such partial JSON update would be not more than some syntax sugar. That
is why it is not yet implemented, though plans for that exist.

Now you have to do something like:

UPDATE test SET data = jsonb_set(data, ARRAY['age'], to_jsonb(30)) WHERE ..

#3Oleg Bartunov
oleg@sai.msu.su
In reply to: support-tiger (#1)
Re: update field in jsonb

On Thu, Nov 23, 2017 at 4:45 AM, support-tiger <support@tigernassau.com> wrote:

is there a way to update a single field in jsonb without replacing the
entire json document - couldn't find an example

for example

create table test (id primary key, data jsonb);

insert into test ({"name":"bill", "age":29});

?? update test set data->age = 30

update test set data = jsonb_set(data, '{age}', '30'::jsonb);

Show quoted text

--
Support Dept
Tiger Nassau, Inc.
www.tigernassau.com
406-624-9310

#4support-tiger
support@tigernassau.com
In reply to: Oleg Bartunov (#3)
Re: update field in jsonb

Oleg,

hey, thanks so much - if you are in USA visiting Yellowstone Natl Park
contact me and the beer is on me (maybe a Wyoming steak too!)

On 11/22/2017 11:27 PM, Oleg Bartunov wrote:

On Thu, Nov 23, 2017 at 4:45 AM, support-tiger <support@tigernassau.com> wrote:

is there a way to update a single field in jsonb without replacing the
entire json document - couldn't find an example

for example

create table test (id primary key, data jsonb);

insert into test ({"name":"bill", "age":29});

?? update test set data->age = 30

update test set data = jsonb_set(data, '{age}', '30'::jsonb);

--
Support Dept
Tiger Nassau, Inc.
www.tigernassau.com
406-624-9310

--
Support Dept
Tiger Nassau, Inc.
www.tigernassau.com
406-624-9310

#5Oleg Bartunov
oleg@sai.msu.su
In reply to: support-tiger (#4)
Re: update field in jsonb

On Fri, Nov 24, 2017 at 3:46 AM, support-tiger <support@tigernassau.com> wrote:

Oleg,

hey, thanks so much - if you are in USA visiting Yellowstone Natl Park
contact me and the beer is on me (maybe a Wyoming steak too!)

Seriously ?

btw, in PG 11 we expect subscription index
update test set data[age]= '30';

Show quoted text

On 11/22/2017 11:27 PM, Oleg Bartunov wrote:

On Thu, Nov 23, 2017 at 4:45 AM, support-tiger <support@tigernassau.com>
wrote:

is there a way to update a single field in jsonb without replacing the
entire json document - couldn't find an example

for example

create table test (id primary key, data jsonb);

insert into test ({"name":"bill", "age":29});

?? update test set data->age = 30

update test set data = jsonb_set(data, '{age}', '30'::jsonb);

--
Support Dept
Tiger Nassau, Inc.
www.tigernassau.com
406-624-9310

--
Support Dept
Tiger Nassau, Inc.
www.tigernassau.com
406-624-9310

#6Sven R. Kunze
srkunze@mail.de
In reply to: Oleg Bartunov (#5)
Re: update field in jsonb

On 24.11.2017 12:19, Oleg Bartunov wrote:

btw, in PG 11 we expect subscription index
update test set data[age]= '30';

Out of curiosity:

Why not?

update test set data->age= 30;

It reminds me more of how to query json in PG

select data->age from test;

Cheer,
Sven