在 PostgreSQL 中,子事务(也称为 “savepoints”)是事务管理中的一个高级特性,它允许用户在一个大的事务内部定义一个或多个savepoints点。这些savepoints允许在发生错误时回滚到某个savepoint,而不是整个事务。子事务是非常有用的,尤其是在事务内处理一系列复杂的操作时,需要在发生错误后从中间的某个操作开始恢复,而不是完全从头开始。子事务的作用典型的子事务的用法包括错误恢复:如果一个事务中的语句失败,可以回滚到最近的 savepoint,而不是回滚整个事务。BEGIN; -- 开始一个新的事务
INSERT INTO orders (product_id, quantity, cost) VALUES (1, 10, 99.99);
SAVEPOINT before_next_operation;
-- 尝试另一个操作,可能会失败,例如违反约束
INSERT INTO orders (product_id, quantity, cost) VALUES (2, 20, 199.99);
-- 假设上面的插入失败了,可以回滚到savepoint
ROLLBACK TO SAVEPOINT before_next_operation;
COMMIT;-- 完成事务,插入成功一行存储过程中EXCEPTION块,也会隐式的开启子事务,以便于在异常出现时
...
继续阅读
(27)