CREATE OR REPLACE FUNCTION full_function_name() RETURNS text AS $$
DECLARE
stack text;
lines text[];
arr_len integer = 0;
index_ integer = 1;
func_name text;
schema_name text;
BEGIN
GET DIAGNOSTICS stack = PG_CONTEXT;
--RAISE NOTICE E'--- Call Stack ---\n%', stack;
--index_ := strpos(stack, 'PL/pgSQL function ');
--RAISE NOTICE E'--- index_ = % \n', index_;
lines = regexp_split_to_array(stack, E'\\n');
--RAISE NOTICE E'--- lines = % \n', lines;
arr_len := array_length(lines, 1);
--RAISE NOTICE E'--- arr_len = % \n', arr_len;
func_name := lines[arr_len];
--RAISE NOTICE E'--- func_name = % \n', func_name;
--index_ := strpos(stack, 'PL/pgSQL function ');
--RAISE NOTICE '--- index_ = % \n', index_;
--func_name := substr(stack, index_);
func_name := substr(func_name, length('PL/pgSQL function ')+1);
index_ := strpos(func_name, ') line ');
--RAISE NOTICE '--- index_ = % ', index_;
func_name := substr(func_name, 1, index_);
index_ := strpos(func_name, '(');
schema_name := substr(func_name, 1, index_-1);
--RAISE NOTICE E'--- schema_name = % \n', schema_name;
index_ := strpos(schema_name, '.');
--RAISE NOTICE '--- index_ = % ', index_;
IF index_ = 0 THEN
schema_name = current_schema;
--RAISE NOTICE E'--- schema_name = % \n', schema_name;
func_name := schema_name||'.'||func_name;
END IF;
RETURN func_name;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION short_function_name() RETURNS text AS $$
DECLARE
func_name text;
index_ integer = 1;
BEGIN
func_name := public.full_function_name();
index_ := strpos(func_name, '.');
--RAISE NOTICE '--- index_ = % ', index_;
func_name := substr(func_name, index_+1);
--RAISE NOTICE E'--- func_name = % \n', func_name;
index_ := strpos(func_name, '(');
--RAISE NOTICE '--- index_ = % ', index_;
func_name := substr(func_name, 1, index_-1);
--RAISE NOTICE E'--- func_name = % \n', func_name;
RETURN func_name;
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION schema_name() RETURNS text AS $$
DECLARE
shm_name text;
index_ integer = 1;
BEGIN
shm_name := public.full_function_name();
index_ := strpos(shm_name, '.');
--RAISE NOTICE '--- index_ = % ', index_;
shm_name := substr(shm_name, 1, index_-1);
--RAISE NOTICE E'--- shm_name = % \n', shm_name;
RETURN shm_name;
END;
$$ LANGUAGE plpgsql;