Re: '{"x": 42, "y": null}'::jsonb != '{"x": 42}'::jsonb ... Really?

Merlin Moncure <mmoncure@gmail.com>

From: Merlin Moncure <mmoncure@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Bryn Llewellyn <bryn@yugabyte.com>, "David G. Johnston" <david.g.johnston@gmail.com>, pgsql-general list <pgsql-general@lists.postgresql.org>
Date: 2022-06-07T15:09:02Z
Lists: pgsql-general
On Sat, Jun 4, 2022 at 12:37 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:

> Bryn Llewellyn <bryn@yugabyte.com> writes:
> > I'm going to try to think like this:
> > The number of possible spellings of the names of keys in a JSON object
> is some flavor of infinite. So including this in an object:
> > "k": null
> > really is saying something. It says that I do know about "k" and that
> yet I have simply no information available about its value.
>
> I'd read it as asserting that key "k" is meaningful for this object,
> but the correct value for that key is not known.
>
> I have a hard time with your assertion that {"x": 42, "y": null}
> should be considered equivalent to {"x": 42}, because it would
> render key-exists predicates useless.  Either you have to say that
> key "y" is claimed to exist in both of these objects and indeed every
> object, or you have to make it fail if the key's value is null (so that
> it'd say "false" in both of these cases).  Either of those options
> seems both weird and useless.
>

yeah. I would expect for json or jsonb, two values, a, b,
a is distinct from b
should give the same answer as
a::text is distinct from b::text

merlin