By default, PL/pgSQL does not print the error context of a RAISE statement, for example:
=# create function foof() returns void as $$ begin raise exception 'foo'; end $$ language plpgsql; CREATE FUNCTION
=# create function bar() returns void as $$ begin perform foof(); end $$ language plpgsql; CREATE FUNCTION
=# select bar(); ERROR: foo CONTEXT: SQL statement "SELECT foof()" PL/pgSQL function "bar" line 1 at PERFORM
I find this extremely surprising, since if you raise the same exception (or a DEBUG/NOTICE message) in multiple places, the error context is missing valuable information. With a trivial change the last error could be:
=# select bar(); ERROR: foo CONTEXT: PL/pgSQL function "foof" line 1 RAISE SQL statement "SELECT foof()" PL/pgSQL function "bar" line 1 at PERFORM