Re: ERROR: operator does not exist: json = json

From: Dagfinn Ilmari Mannsåker <ilmari(at)ilmari(dot)org>
To: Erik Rijkers <er(at)xs4all(dot)nl>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: ERROR: operator does not exist: json = json
Date: 2022-07-08 11:57:19
Message-ID: 87wncnizq8.fsf@wibble.ilmari.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Erik Rijkers <er(at)xs4all(dot)nl> writes:

> Hi,
>
> Comparison of 2 values of type jsonb is allowed.
>
> Comparison of 2 values of type json gives an error.
>
> That seems like an oversight -- or is it deliberate?

This is because json is just a textual representation, and different
JSON strings can be semantically equal because e.g. whitespace and
object key order is not significant.

> Example:
>
> select '42'::json = '{}'::json;
> --> ERROR: operator does not exist: json = json
>
> (of course, easily 'solved' by casting but that's not really the
> point)

To do a proper comparison you have to parse it into a semantic form,
which is what casting to jsonb does.

> Thanks,
>
> Erik Rijkers

- ilmari

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Steele 2022-07-08 12:01:06 Re: Add function to return backup_label and tablespace_map
Previous Message Bharath Rupireddy 2022-07-08 11:53:17 Re: Add function to return backup_label and tablespace_map