Is there anyway from within a plpgsql function that you can get the name of the function? Or even the OID of the function?
I know there are some \"special\" variab
As of Postgres 9.4, the below function will return its own name:
CREATE OR REPLACE FUNCTION your_schema.get_curr_fx_name()
RETURNS text AS $$
DECLARE
stack text; fcesig text;
BEGIN
GET DIAGNOSTICS stack = PG_CONTEXT;
fcesig := substring(stack from 'function (.*?) line');
RETURN fcesig::regprocedure::text;
END;
$$ LANGUAGE plpgsql;
For triggers use TG_NAME to get the name of the trigger (not the trigger function) fired.
You also have current_query()
to get the top level query executed by the application, the root cause for your function's execution. It won't show you any intermediate functions.
Otherwise, not really AFAIK and I did go looking for it a while ago when I wanted to print a "current function stack" for debugging. Others may know more.
UPDATE: In Pg 9.4 and above you can also use PG_CONTEXT
to the call stack, but not just the current function name.
Update: possibility to take call stack is available in PostgreSQL 9.4
No, there is no way how to get name of currently executed function in plpgsql function.
Some year ago I wrote functions for access to call stack - it is part of orafce. You can get last function from stack