PostgreSQL:如果下一条语句是 RAISE EXCEPTION,则在函数中删除外部服务器将不起作用

PostgreSQL: Deleting foreign server in a function will not work if the next statement is RAISE EXCEPTION

在 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 语句。

我在这里错过了什么?

对于您的情况,raise exception 不是通知调用此函数的消费者的好方法。

引发异常 (raise exception) 不是一个好方法,因为您希望在通知之前完成一些工作,这又违反了事务规则。

您只需调用 RETURN 来终止函数或在 RETURN.

中添加一些布尔变量

基本上这一切都取决于你如何声明你的功能。