如何在PostgreSQL函数中使用COMMIT和ROLLBACK

Rah*_*our 5 postgresql postgresql-10

我使用三个插入语句,如果第三个语句中有错误,我想回滚第一个和第二个.如果没有办法做到这一点,请告诉我一个不同的方法来处理PostgresqQL中的这个.

如果我使用COMMITROLLBACK,我收到错误.

CREATE OR REPLACE FUNCTION TEST1 ()
   RETURNS VOID
   LANGUAGE 'plpgsql'
   AS $$
BEGIN 

    INSERT INTO table1 VALUES (1);

    INSERT INTO table1 VALUES (2);

    INSERT INTO table1 VALUES ('A');
    COMMIT;
EXCEPTION
   WHEN OTHERS THEN
   ROLLBACK;
END;$$;
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用; COMMIT并且ROLLBACKPostgreSQL函数不支持.

Lau*_*lbe 13

不能使用交易之类的语句SAVEPOINT,COMMITROLLBACK在一个函数.

BEGIN启动PL/pgSQL的一个块是从SQL语句不同BEGIN的是启动一个事务.

只需COMMIT从您的函数中删除,您就拥有了解决方案:由于整个函数始终在单个事务中运行,因此第三个语句中的任何错误都将导致ROLLBACK同时撤消前两个语句.

  • @GujaratSantana 我添加了文档中的引用。 (2认同)