来自MS SQL世界,我倾向于大量使用存储过程.我正在编写一个应用程序使用了大量的PostgreSQL plpgsql函数.我想要做的是回滚一个特定函数中包含的所有INSERTS / UPDATES,如果我在其中的任何一点收到异常.
我最初的印象是,每个函数都包含在自己的事务中,并且异常会自动回滚所有内容.不过,似乎并非如此.我想知道我是否应该使用保存点与异常处理相结合?但是,我不太明白事务和保存点之间的区别,以便知道这是否是最佳方法.有什么建议吗
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,'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;