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