Search Postgresql Archives

Re: JSONB operator unanticipated behaviour

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxx <mailto:brian@xxxxxxxxxxx>

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.klaver@xxxxxxxxxxx






[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]

  Powered by Linux