PostgreSQL: удаление стороннего сервера в функции не будет работать, если следующий оператор - RAISE EXCEPTION - PullRequest
1 голос
/ 06 марта 2019

В PostgreSQL 9.6.

У меня есть функция, где я создаю временный сторонний сервер.Я использую его, а затем пытаюсь удалить.

НО, когда я пытаюсь вызвать исключение сразу после вызова сервера удаления, сервер не удаляется.Если я закомментирую исключение повышения, то внешний сервер будет удален.

При этом внешний сервер не будет удален:

if (errcondition=true) then
    func_delete_server(srv_name);

    raise exception '%', 'an error happened';
end if;

При этом внешний серверсервер является удаленным

if (errcondition=true) then
    func_delete_server(srv_name);

    --raise exception '%', 'an error happened';
end if;

func_delete_server просто содержит оператор drop server.

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 06 марта 2019

Для вашего случая raise exception - не лучший способ уведомить потребителя, который вызывает эту функцию.

Запустить исключение (raise exception) - не очень хороший способ, когда вы хотите, чтобы какая-то работа была выполнена до того, как вы уведомите об этом, и это повторяет правило транзакции.

Вам просто нужно вызвать RETURN, чтобы завершить функцию или иметь некоторые логические переменные в вашем RETURN.

В основном все зависит от того, как вы объявили свою функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...