====== Обработка исключений ====== [[https://habr.com/ru/articles/657667/]] - {{it:postgresql:exception:try_-_catch_v_postgresql.mht|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