Re: jsonb_set array append hack?
От | Andrew Dunstan |
---|---|
Тема | Re: jsonb_set array append hack? |
Дата | |
Msg-id | 55F71915.5080708@dunslane.net обсуждение исходный текст |
Ответ на | jsonb_set array append hack? (Thom Brown <thom@linux.com>) |
Ответы |
Re: jsonb_set array append hack?
|
Список | 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 по дате отправления: