我正在尝试编写一个PL / pgSQL函数,我首先验证参数(主要检查所提供的ID是否存在)。
当其中一个验证失败时,我会引发一个说明原因的异常,以便客户端代码可以重试。
我面临的问题是,出于安全原因(如果需要我可以提供更多上下文,但基本上我想让应用程序处于非功能状态,直到专门的干预),我想写一些在引发异常并回滚更改之前对表的值。这只是我想要坚持的一些变化(没有回滚)。
我理解事务不能在函数内部使用,因为没有上下文,我发现我可以使用dblink做我想做的事情(我刚刚发现)。
事情是它真的感觉很乱,所以我想问一下这是否合理。
这里有一些假代码来说明:
CREATE FUNCTION func(x_id INT) RETURNS INT AS $$
DECLARE
BEGIN
PERFORM * FROM x_table WHERE id = x_id;
IF NOT FOUND THEN
-- write persisting values that will prevent further
-- use, probably using dblink
RAISE EXCEPTION 'Invalid x_id: %', x_id
END IF;
-- function logic
END;
$$ LANGUAGE plpgsql;