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
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 |