如何在Postgresql中失败的查询中有效地使用事务

时间:2014-05-22 08:29:36

标签: sql postgresql

我对postgresql中的事务有点新意。我读了很多教程,但我想做的是... 如果我有很多查询,例如:

INSERT INTO a (id) VALUES (1)
INSERT INTO a (id) VALUES (2)
INSERT INTO a (id) VALUES (3)
INSERT INTO a (id) VALUES (4)
....

如果由于某些问题在第3个或任何第n个查询中失败,我想要的是自动回滚所有其他先前的查询。

我的问题是,在postgresql中有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

如果您有事务,如果任何查询失败,PostgreSQL将自动ROLLBACK整个事务。如果你提交ROLLBACK或COMMIT没关系,那么回滚就会跟着。此外,任何提交的查询都将以SQL异常结束。

这是对交易概念的严格看法:全有或全无。

如果您不想要此类行为,则需要使用 savepoints plpgsql 阻止EXCEPTION处理。