Re: Why does jsonb_set() remove non-mentioned keys? - Mailing list pgsql-general

From Thomas Kellerer
Subject Re: Why does jsonb_set() remove non-mentioned keys?
Date
Msg-id qflnq9$86re$1@blaine.gmane.org
Whole thread Raw
In response to Re: Why does jsonb_set() remove non-mentioned keys?  ("David G. Johnston" <david.g.johnston@gmail.com>)
Responses Re: Why does jsonb_set() remove non-mentioned keys?
List pgsql-general
David G. Johnston schrieb am 04.07.2019 um 18:20:
> On Thu, Jul 4, 2019 at 6:18 AM Thomas Kellerer <spam_eater@gmx.net <mailto:spam_eater@gmx.net>> wrote:
> 
>     Why does
> 
>         select jsonb_set('{"foo": 1}'::jsonb, '{bar}', to_jsonb(null::int), true)
> 
>     return NULL when all it should do is to add a second key?
> 
> 
> Both functions involved are defined as being STRICT (null on null
> input).  You need to COALSESCE SQL NULL to JSON 'null' to obtain the
> result you desire.  This is a general truth when dealing with the
> JSON type in PostgreSQL.

But jsonb_set() doesn't change (or shouldn't) the whole value, only one key.

I can understand that the "bar" key would not be set (because of the NULL), but removing a key that isn't even part of
thetarget path looks like a bug to.
 

Thomas

  




pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: Re: Converting to identity columns with domains on PK columns
Next
From: Adrian Klaver
Date:
Subject: Re: Converting to identity columns with domains on PK columns