我对postgresql嵌套函数和事务有疑问。如您所知,postgresql中的每个函数都在一个事务中。我很好奇内部函数是否失败,外部函数中所做的所有更改都会回滚吗?
这是一个例子
function 1(){
insert some data into table 1;
call function2
insert some data into table 2;
}
如果function2中有错误,那么“表1中的插入”会回滚吗?
有什么建议吗?
答案 0 :(得分:0)
是的,除非您设置了可以回滚的保存点。
在PL / pgSQL中,这是使用BEGIN ... EXCEPTION ... END;
块隐式完成的,因此以下内容不会回滚第一个INSERT
:
CREATE FUNCTION function 1() RETURNS void
LANGUAGE plpgsql AS
$$BEGIN
insert some data into table 1;
BEGIN
function2();
EXCEPTION
WHEN others THEN /* catch any exception */
NULL; / ignore error */
END;
insert some data into table 2;
END;$$;
有关详细信息,请参阅the documentation。
在其他语言中,有不同的方法可以做到这一点。