В одной функции plpgsql у меня есть блок исключения, подобный этому:
exception when others then
txt := 'error text ';
perform record_error(id, table, txt);
И когда возникает исключение, я хочу выполнить другую функцию, которая добавляет информацию об ошибке в таблицу журнала следующим образом:
CREATE OR REPLACE FUNCTION record_error(
id integer,
layer text,
message text)
RETURNS void AS
$BODY$
DECLARE
l_code integer:= 'sqlstate'
l_mesg varchar:= 'SQLERRM';
l_context text;
l_detail text;
BEGIN
GET STACKED DIAGNOSTICS l_context = PG_EXCEPTION_CONTEXT;
GET STACKED DIAGNOSTICS l_detail = PG_EXCEPTION_DETAIL;
INSERT INTO error_log ( error_code ,
error_message ,
backtrace ,
callstack ,
created_on ,
created_by ,
user_msg ,
etak_id ,
layer )
VALUES (l_code ,
l_mesg ,
l_context,
l_detail ,
current_timestamp ,
CURRENT_USER ,
message ,
ETAK_ID ,
Layer );
END;
$BODY$
LANGUAGE plpgsql VOLATILE
Но я получаю сообщение ОШИБКА: невозможно получить GET STACKED DIAGNOSTICS вне обработчика исключений.
Могу ли я использовать SQLSTATE и получить информацию STACKED DIAGNOSTICS в другой функции?