From: | Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com> |
---|---|
To: | Brian Mendoza <brian(at)rotamap(dot)net>, pgsql-general(at)postgresql(dot)org |
Subject: | Re: JSONB operator unanticipated behaviour |
Date: | 2023-05-18 14:41:16 |
Message-ID: | c8663245-c568-9071-817b-06a288fd4e0d@aklaver.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On 5/18/23 06:17, Brian Mendoza wrote:
> Hello,
>
> I have encountered unanticipated behaviour with a JSONB operator, and
> wanted to make sure I am not misunderstanding its intended use.
>
> When using the @> operator, I get this result.
>
> select '{"a": [1]}'::jsonb @> '{"a": []}'::jsonb;
> ?column?
> ----------
> t
> (1 row)
>
> However, given the phrasing in the documentation, I would have expected
> False.
>
> "Does the left JSON value contain the right JSON path/value entries at
> the top level?"
>
> Particularly given the following:
>
> select '[1]'::jsonb = '[]'::jsonb;
> ?column?
> ----------
> f
> (1 row)
>
> So the keys are the same, the values (when compared directly) are not,
> but @> returns True. Have I misunderstood the usage of the operator?
>
> The above queries have been run on postgres 14, if that helps.
Have you looked at the containment examples?:
https://www.postgresql.org/docs/current/datatype-json.html#JSON-CONTAINMENT
I'm thinking this:
-- A top-level key and an empty object is contained:
SELECT '{"foo": {"bar": "baz"}}'::jsonb @> '{"foo": {}}'::jsonb;
and/or this
"The general principle is that the contained object must match the
containing object as to structure and data contents, possibly after
discarding some non-matching array elements or object key/value pairs
from the containing object. "
applies.
>
> --
> Brian Mendoza
> brian(at)rotamap(dot)net <mailto:brian(at)rotamap(dot)net>
>
> Rotamap
> www.rotamap.net <https://www.rotamap.net>
> 020 7631 1555
> 3 Tottenham Street London W1T 2AF
> Registered in England No. 04551928
--
Adrian Klaver
adrian(dot)klaver(at)aklaver(dot)com
From | Date | Subject | |
---|---|---|---|
Next Message | Brian Mendoza | 2023-05-18 15:09:22 | Re: JSONB operator unanticipated behaviour |
Previous Message | Adrian Klaver | 2023-05-18 14:35:08 | Re: Is there a good way to handle sum types (or tagged unions) in PostgreSQL? |