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.
中添加一些布尔变量
基本上这一切都取决于你如何声明你的功能。
在 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.
基本上这一切都取决于你如何声明你的功能。