Обработка исключений

https://habr.com/ru/articles/657667/ - mht - TRY / CATCH в PostgreSQL

Полный список переменных, которые можно получить командой GET STACKED DIAGNOSTICS

ИмяТипОписание
RETURNED_SQLSTATEtextкод исключения
COLUMN_NAMEtextимя столбца, относящегося к исключению
CONSTRAINT_NAMEtextимя ограничения целостности, относящегося к исключению
PG_DATATYPE_NAMEtextимя типа данных, относящегося к исключению
MESSAGE_TEXTtextтекст основного сообщения исключения
TABLE_NAMEtextимя таблицы, относящейся к исключению
SCHEMA_NAMEtextимя схемы, относящейся к исключению
PG_EXCEPTION_DETAILtextтекст детального сообщения исключения (если есть)
PG_EXCEPTION_HINTtextтекст подсказки к исключению (если есть)
PG_EXCEPTION_CONTEXTtextстроки текста, описывающие стек вызовов в момент исключения

Пример

BEGIN
  -- код, в котором может возникнуть исключение
EXCEPTION WHEN OTHERS  
THEN
	GET STACKED DIAGNOSTICS
    	err_code = RETURNED_SQLSTATE, -- код ошибки
	msg_text = MESSAGE_TEXT, -- текст ошибки
    	exc_context = PG_CONTEXT, -- контекст исключения
	msg_detail = PG_EXCEPTION_DETAIL, -- подробный текст ошибки
	exc_hint = PG_EXCEPTION_HINT; -- текст подсказки к исключению
 
    RAISE NOTICE 'ERROR CODE: % MESSAGE TEXT: % CONTEXT: % DETAIL: % HINT: %', 
   	err_code, msg_text, exc_context, msg_detail, exc_hint;
END

Результаты обработки ошибки будут выведены на консоль (пример ошибки деления на 0):

ERROR CODE: 22012 
MESSAGE TEXT: деление на ноль 
CONTEXT: функция PL/pgSQL catch_exception(integer,integer), строка 14, оператор 
GET STACKED DIAGNOSTICS
SQL-оператор: "SELECT e.res FROM catch_exception(4, 0) AS e"
функция PL/pgSQL inline_code_block, строка 5, оператор SQL-оператор
Result: 0