https://habr.com/ru/articles/657667/ - mht - TRY / CATCH в PostgreSQL
Полный список переменных, которые можно получить командой GET STACKED DIAGNOSTICS
Имя | Тип | Описание |
---|---|---|
RETURNED_SQLSTATE | text | код исключения |
COLUMN_NAME | text | имя столбца, относящегося к исключению |
CONSTRAINT_NAME | text | имя ограничения целостности, относящегося к исключению |
PG_DATATYPE_NAME | text | имя типа данных, относящегося к исключению |
MESSAGE_TEXT | text | текст основного сообщения исключения |
TABLE_NAME | text | имя таблицы, относящейся к исключению |
SCHEMA_NAME | text | имя схемы, относящейся к исключению |
PG_EXCEPTION_DETAIL | text | текст детального сообщения исключения (если есть) |
PG_EXCEPTION_HINT | text | текст подсказки к исключению (если есть) |
PG_EXCEPTION_CONTEXT | text | строки текста, описывающие стек вызовов в момент исключения |
Пример
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