来自 MS SQL 领域的我倾向于大量使用存储过程。我目前正在编写一个应用程序,使用了很多 PostgreSQL plpgsql 函数。我想做的是,如果我在特定函数中的任何点出现异常,则回滚特定函数中包含的所有插入/更新。
我最初的印象是每个函数都包含在它自己的事务中,并且异常会自动回滚所有内容。然而,情况似乎并非如此。我想知道是否应该将保存点与异常处理结合使用?但我真的不明白事务和保存点之间的区别,不知道这是否是最好的方法。请问有什么建议吗?
CREATE OR REPLACE FUNCTION do_something(
_an_input_var int
) RETURNS bool AS $$
DECLARE
_a_variable int;
BEGIN
INSERT INTO tableA (col1, col2, col3)
VALUES (0, 1, 2);
INSERT INTO tableB (col1, col2, col3)
VALUES (0, 1, 'whoops! not an integer');
-- The exception will cause the function to bomb, but the values
-- inserted into "tableA" are not rolled back.
RETURN True;
END; $$ LANGUAGE plpgsql;
一个功能does代表一笔交易。您不必将函数包装在 BEGIN/COMMIT 中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)