PostgreSQL:如果下一条语句为RAISE EXCEPTION,则无法删除函数中的外部服务器

时间:2019-03-06 18:46:33

标签: postgresql exception postgresql-9.6

在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 :(得分:0)

对于您的情况,raise exception并不是通知正在调用此函数的使用者的好方法。

引发异常(raise exception)并不是一种好方法,在这种情况下,您希望在通知之前完成一些工作,而这又是交易规则。

您只需要调用RETURN即可终止函数或在RETURN中包含一些布尔变量。

基本上,这完全取决于您声明功能的方式。