Re: jsonb_set array append hack? - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: jsonb_set array append hack?
Date
Msg-id 55F71915.5080708@dunslane.net
Whole thread Raw
In response to jsonb_set array append hack?  (Thom Brown <thom@linux.com>)
Responses Re: jsonb_set array append hack?  (Dmitry Dolgov <9erthalion6@gmail.com>)
List pgsql-hackers

On 09/14/2015 01:29 PM, Thom Brown wrote:
> Hi,
>
> I've noticed that if you use a string for an element key in jsonb_set 
> with create_missing set to true, you can use it to append to an array:
>
> postgres=# SELECT jsonb_set(
> '{"name": "Joe", "vehicle_types": ["car","van"]}'::jsonb,
>            '{vehicle_types,nonsense}',
>            '"motorcycle"', true);
> jsonb_set
> ----------------------------------------------------------------
>  {"name": "Joe", "vehicle_types": ["car", "van", "motorcycle"]}
> (1 row)
>
> What this really should match is a nested element inside 
> "vehicle_types" called "nonsense".  But this seems to be a hack to get 
> an element added to an array.  To do it properly currently requires 
> specifying an arbitrary number in the hope that it will exceed the 
> number of elements you have in the array.


That's a bug and we should fix it.


>
> e.g.
>
> postgres=# SELECT jsonb_set(
>            '{"name": "Joe", "vehicle_types": ["car","van"]}'::jsonb,
>            '{vehicle_types,100000}',
>            '"motorcycle"', true);
> jsonb_set
> ----------------------------------------------------------------
>  {"name": "Joe", "vehicle_types": ["car", "van", "motorcycle"]}
> (1 row)
>
> But I'm guessing people shouldn't be relying on the hack in the first 
> example.  Isn't this a bug?  If so, wouldn't this also be a bug?:
>
> postgres=# SELECT jsonb_set(
>            '{"name": "Joe", "vehicle_types": ["car","van"]}'::jsonb,
>            array['vehicle_types',NULL],
>            '"motorcycle"', true);
>
>

I think that's a bug too.

cheers

andrew




pgsql-hackers by date:

Previous
From: Teodor Sigaev
Date:
Subject: Re: [PROPOSAL] Covering + unique indexes.
Next
From: Andrew Dunstan
Date:
Subject: cache type info in json_agg and friends