Re: Why does jsonb_set() remove non-mentioned keys?

From: Thomas Kellerer <spam_eater(at)gmx(dot)net>
To: pgsql-general(at)postgresql(dot)org
Subject: Re: Why does jsonb_set() remove non-mentioned keys?
Date: 2019-07-04 20:33:12
Message-ID: qflnq9$86re$1@blaine.gmane.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: 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(at)gmx(dot)net <mailto:spam_eater(at)gmx(dot)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 the target path looks like a bug to.

Thomas

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Adrian Klaver 2019-07-04 20:56:53 Re: Converting to identity columns with domains on PK columns
Previous Message Adrian Klaver 2019-07-04 20:27:53 Re: Converting to identity columns with domains on PK columns