Re: inconsistent jsonb 'null' conversions - Mailing list pgsql-hackers

From Sehrope Sarkuni
Subject Re: inconsistent jsonb 'null' conversions
Date
Msg-id CAH7T-ap9HuP7RucnhADTTqfkyj0tJN4KADw+9fJV=UDFHT0VWA@mail.gmail.com
Whole thread
In response to inconsistent jsonb 'null' conversions  (Pavel Stehule <pavel.stehule@gmail.com>)
List pgsql-hackers
On Sun, Jul 5, 2026 at 8:59 AM Pavel Stehule <pavel.stehule@gmail.com> wrote:
>
> I found inconsistency in casting the value "null" of jsonb type to scalar types.
>
> (2026-07-05 14:54:08) postgres=# select 'null'::jsonb::int is null;
> ┌──────────┐
> │ ?column? │
> ╞══════════╡
> │ t        │
> └──────────┘
> (1 row)
>
> (2026-07-05 14:56:26) postgres=# select 'null'::jsonb::varchar is null;
> ┌──────────┐
> │ ?column? │
> ╞══════════╡
> │ f        │
> └──────────┘
> (1 row)
>
> Is it expected behaviour?

I'm not sure if this is expected, but the cast from json to int not
giving an error for null is a change from v17. That cast previously
failed.

The json-to-int (as opposed to jsonb) fails for both v17 and v18. Also
interesting that the json-to-int provides the error location but
jsonb-to-int does not.


SELECT version()
                                                      version
--------------------------------------------------------------------------------------------------------------------
 PostgreSQL 18.3 (Debian 18.3-1.pgdg13+1) on x86_64-pc-linux-gnu,
compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
(1 row)

SELECT 'null'::jsonb::int IS NULL
 ?column?
----------
 t
(1 row)

SELECT 'null'::json::int IS NULL
ERROR:  cannot cast type json to integer
LINE 1: SELECT 'null'::json::int IS NULL
                           ^
SELECT 'null'::json::text IS NULL
 ?column?
----------
 f
(1 row)



SELECT version()
                                                       version
---------------------------------------------------------------------------------------------------------------------
 PostgreSQL 17.5 (Debian 17.5-1.pgdg120+1) on x86_64-pc-linux-gnu,
compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
(1 row)

SELECT 'null'::jsonb::int IS NULL
ERROR:  cannot cast jsonb null to type integer

SELECT 'null'::json::int IS NULL
ERROR:  cannot cast type json to integer
LINE 1: SELECT 'null'::json::int IS NULL
                           ^
SELECT 'null'::json::text IS NULL
 ?column?
----------
 f
(1 row)


Regards,
-- Sehrope Sarkuni
Founder & CEO | JackDB, Inc. | https://www.jackdb.com/



pgsql-hackers by date:

Previous
From: Dongpo Liu
Date:
Subject: [PATCH] Remove unused include from analyze.c
Next
From: Tom Lane
Date:
Subject: Re: Fixing MSVC's inability to detect elog(ERROR) does not return