Re: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions - Mailing list pgsql-hackers

From Corey Huinker
Subject Re: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions
Date
Msg-id CADkLM=c_QQkpBhm0HfGm5C8gOFNKW6g5E=W5Jp9mjayUW3yXYQ@mail.gmail.com
Whole thread
In response to Re: CAST(... ON DEFAULT) - WIP build on top of Error-Safe User Functions  (jian he <jian.universality@gmail.com>)
List pgsql-hackers
On Wed, Apr 1, 2026 at 3:23 AM jian he <jian.universality@gmail.com> wrote:
One more issue I found:
https://git.postgresql.org/cgit/postgresql.git/commit/?id=74c96699be3f53c058c8794c07952221b9625b4f
SELECT JSON_VALUE(jsonb '1234', '$' RETURNING char(2)  DEFAULT '011' ON ERROR);
ERROR:  value too long for type character(2)

Similarly, we can
SELECT CAST(text '1234' as char(2) DEFAULT '111111' ON conversion ERROR);
ERROR:  value too long for type character(2)

Both of these are doomed when we hit the default, so I don't see why we should make any accommodation for them.

 
Composite types respect typmod, for example:
CREATE TYPE comp AS (a char(3), b int);
SELECT CAST('(14,42)' AS comp DEFAULT '(1234,2)' ON CONVERSION ERROR); -- error

This one is trickier, but I'd be willing to reject composite inputs in v19 and solve it in v20.
 
The regression tests are too large; we can order them by the cast
source type's pg_type.type category,
so we won't miss any tests.

We can always remove redundant tests later.

pgsql-hackers by date:

Previous
From: Masahiko Sawada
Date:
Subject: Re: Introduce XID age based replication slot invalidation
Next
From: Tom Lane
Date:
Subject: Re: [PROPOSAL] Termination of Background Workers for ALTER/DROP DATABASE