Hello all! Trying to emulate "named" user defined exception with: CREATE OR REPLACE FUNCTION exception_aaa () RETURNS text AS $body$ BEGIN return 31234; END; $body$ LANGUAGE PLPGSQL SECURITY DEFINER ;
do $$ begin raise exception using errcode=exception_aaa(); exception when sqlstate exception_aaa() then raise notice 'got exception %',sqlstate; end; $$
Got:
ERROR: syntax error at or near "exception_aaa" LINE 20: sqlstate exception_aaa()
I looks like "when sqlstate exception_aaa()" doesn't work.
How can I catch exception in this case?
I'm doubtful that it can be done presently.
If it were possible your exception_aaa function would have to be declared IMMUTABLE. It also seems pointless to declare it security definer.
There is nothing in the documentation that suggests that (or, to be fair, prohibits) the "condition" can be anything other than a pre-defined name or a constant string. When plpgsql get a function body it doesn't go looking for random functions to execute.