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

问题描述 投票:1回答:1

在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声明。

我在这里错过了什么?

postgresql exception postgresql-9.6
1个回答
0
投票

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

触发异常(raise exception)并不是一个好方法,你需要在通知之前完成一些工作,而这又是交易规则。

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

基本上它完全取决于你如何声明你的功能。

© www.soinside.com 2019 - 2024. All rights reserved.