On Thu, Jan 6, 2022 at 12:18 PM Andrew Dunstan <and...@dunslane.net> wrote:

>
> 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:
>
>
That's great to know, but it would still be parsing the json twice, once to
learn that it is legit json, and once to get the casted value.

Also, I had a similar issue with type numeric, so having generic "x is a
type_y" support would essentially do everything that a try_catch()-ish
construct would need to do, and be more generic.

Reply via email to