加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL:在plpgsql函数内回滚事务?

发布时间:2020-12-13 16:32:52 所属栏目:百科 来源:网络整理
导读:来自MS SQL世界,我倾向于大量使用存储过程.我正在编写一个应用程序使用了大量的PostgreSQL plpgsql函数.我想要做的是回滚一个特定函数中包含的所有INSERTS / UPDATES,如果我在其中的任何一点收到异常. 我最初的印象是,每个函数都包含在自己的事务中,并且异常
来自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;
一个函数表示一个事务.您不必在BEGIN / COMMIT中包装函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读