Re: jsonb array-style subscripting

Andrew Dunstan <andrew@dunslane.net>

From: Andrew Dunstan <andrew@dunslane.net>
To: Merlin Moncure <mmoncure@gmail.com>, Dmitry Dolgov <9erthalion6@gmail.com>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2015-08-17T19:44:51Z
Lists: pgsql-hackers

On 08/17/2015 03:26 PM, Merlin Moncure wrote:
>
> I'm not sure if this:
> update test_jsonb_subscript set test_json['a']['a1']['a2'] = 42;
>
> ...is a good idea. postgres operators tend to return immutable copies
> of the item they are referring to.  In other words, you'd never see a
> column operator on the 'left' side of the equals in an update
> statement.  I think you need to look at a function to get the behavior
> you want:
>
> update test_jsonb_subscript set test_json = jsonb_modify(test_json,
> '[a][a1][a2] = 42');]
>
> ...as a hypothetical example.   The idea is you need to make a
> function that provides the ability to make the complete json you want.
> Update statements always make a copy of the record anyways.
>


Why should jsonb be different from an array? You can assign to an array 
element, using exactly this syntax, except that the index expressions 
have to be integers.

This was discussed at pgcon and generally met with approval. There is 
some demand for it. If Dmitry hadn't done this I would probably have 
done it myself.

cheers

andrew


Commits

  1. Throw error when assigning jsonb scalar instead of a composite object

  2. Filling array gaps during jsonb subscripting

  3. Implementation of subscripting for jsonb