On 13/05/15 16:34, Andrew Dunstan wrote:
>
> On 05/12/2015 04:11 PM, Pavel Stehule wrote:
>> Hi
>>
>> I did some tests, and I am not sure if this is not bug:
>>
>> postgres=# select '{"x":20}'::jsonb - 'x'::text;
>> ERROR: unknown type of jsonb container --->>> it should be empty
>> jsonb, not error
>> Time: 0.971 ms
>> postgres=# select '{"x":20, "y":30}'::jsonb - 'x'::text;
>> ┌───────────┐
>> │ ?column? │
>> ╞═══════════╡
>> │ {"y": 30} │
>> └───────────┘
>> (1 row)
>>
>>
>>
>
>
>
> Some of this logic needs tightening. The attached patch should do that.
> Among other things, it errors out if we attempt to delete or replace on
> a scalar, just returns the input argument if there are no changes
> instead of cloning it, checks via an Assert that the constructed
> JsonbValue is not null, and otherwise returns it unconditionally. The
> result is actually simpler code, I think. Before I apply it I'd like to
> have comments from Dmitry and Petr, just to make sure I haven't
> inadvertently slipped my moorings.
>
I think it's ok like this, except that the "cannot get delete from
scalar" error message should probably be "cannot delete from scalar" in
both places.
--
Petr Jelinek http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services