Re: Suggestion: optionally return default value instead of error on failed cast

From: Andrew Dunstan <andrew(at)dunslane(dot)net>
To: Corey Huinker <corey(dot)huinker(at)gmail(dot)com>, Wolfgang Walther <walther(at)technowledgy(dot)de>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: Suggestion: optionally return default value instead of error on failed cast
Date: 2022-01-06 17:18:26
Message-ID: ebbeba95-d814-43be-6830-928413ad9eda@dunslane.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


On 1/4/22 22:17, Corey Huinker wrote:
>
> currently a failed cast throws an error. It would be useful to have a
> way to get a default value instead.
>
>
> I've recently encountered situations where this would have been
> helpful. Recently I came across some client code:
>
> CREATE OR REPLACE FUNCTION is_valid_json(str text) RETURNS boolean
> LANGUAGE PLPGSQL
> AS $$
> DECLARE
>     j json;
> BEGIN
>     j := str::json;
>     return true;
> EXCEPTION WHEN OTHERS THEN return false;
> END
> $$;
>
>
> This is a double-bummer. First, the function discards the value so we
> have to recompute it, and secondly, the exception block prevents the
> query from being parallelized.

This particular case is catered for in the SQL/JSON patches which
several people are currently reviewing:

andrew=# select 'foo' is json;
 ?column?
----------
 f
(1 row)

andrew=# select '"foo"' is json;
 ?column?
----------
 t
(1 row)

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Justin Pryzby 2022-01-06 17:26:34 Re: Emit "checkpoint skipped because system is idle" message at LOG level if log_checkpoints is set
Previous Message Joel Jacobson 2022-01-06 17:17:55 Re: pl/pgsql feature request: shorthand for argument and local variable references