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
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers