在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中包含一些布尔变量。
基本上它完全取决于你如何声明你的功能。