Я добавляю обработку исключений в хранимые процедуры PostgreSQL для автоматического отката транзакций после возникновения ошибки.Возврат данных об ошибках вызывающей функции после обнаружения исключения в Postgresql
Проблема заключается в том, что после того, как я поймаю исключение, я не могу вернуть детали ошибки в вызывающую программу C, которая использует libpq.
Серьезность, SQLSTATE, Первичный, Подробный и Подсказка - все значения null. Есть ли способ вернуть их после обнаружения исключения?
Функция libpq, которую я использую для сбора этих значений, - PQresultErrorField().
Точно. Возможно, у ОП есть какое-то приложение с более чем одним соединением, требующее двухфазной фиксации? – wildplasser
Не могли бы вы рассказать об этом? Я принимал то же самое, однако, когда я вызываю процедуру, которая возвращает курсор, который я хочу перебрать, и в какой-то момент я вызываю исключение, это то, что я получаю: «ОШИБКА: текущая транзакция прерывается, команды игнорируются до конца транзакционный блок ". Поэтому из того, что я понимаю, я должен поймать исключение в моей процедуре, чтобы откат. Я ошибаюсь? –
Хорошая точка. Все откидывается назад, бесполезно пытаться что-то убрать. Однако есть редкие исключения, такие как эффекты вызовов dblink, которые никогда не откатываются назад. То, что OP понадобится в таком случае, - это вызвать «RAISE;» в конце блока исключения, я соответствующим образом изменил свой ответ. –