Raise exception without using plpgsql? - Mailing list pgsql-general

From Joel Jacobson
Subject Raise exception without using plpgsql?
Date
Msg-id 7479ca12-af3c-44c3-9ddd-a2074eb82a12@www.fastmail.com
Whole thread Raw
Responses Re: Raise exception without using plpgsql?
Re: Raise exception without using plpgsql?
List pgsql-general
Hi,

Is there a way to raise an exception with a message,
without having to add your own plpgsql helper-function?

Currently this is what I have:

CREATE OR REPLACE FUNCTION raise(message text, debug json, dummy_return_value anyelement)
RETURNS anyelement
LANGUAGE plpgsql
AS $$
BEGIN
RAISE '% %', message, debug;
END;
$$;

The dummy value allows using the function in a context where a value of the given type is expected.

Here is a mockup example on the coding pattern where I typically would use this raise() helper-function:

SELECT
  CASE
    WHEN foo = 0 THEN f0(bar)::baz
    WHEN foo = 1 THEN f1(bar)::baz
    WHEN foo = 2 THEN f2(bar)::baz
    ELSE raise('Not implemented',json_build_object(
    'foo',foo,
    'bar',bar
    ),NULL::baz)
  END
FROM ...

The idea is to throw an exception when a case is not handled, instead of just letting the CASE produce a NULL value.

The dummy_return_value anyelement with the same type as the other CASEs is necessary, otherwise, if trying to just return anyelement without the dummy_return_value you would get error:

DETAIL:  A result of type anyelement requires at least one input of type anyelement, anyarray, anynonarray, anyenum, or anyrange.

Is there any idiomatic way of achieving the same, without having to rely on a plpgsql function in this way?

Best regards,

Joel

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: SV: Problem with ssl and psql in Postgresql 13
Next
From: Gustavsson Mikael
Date:
Subject: SV: SV: Problem with ssl and psql in Postgresql 13