使用ROLLBACK TO SAVEPOINT回滚到一个保存点。使用RELEASE SAVEPOINT 删除一个保存点,但是保留该保存点建立后执行的命令的效果。
保存点只能在一个事务块里面建立。在一个事务里面可以定义多个保存点。
建立一个保存点,稍后撤销这个保存点建立后执行的所有命令的结果:
BEGIN; INSERT INTO table1 VALUES (1); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (2); ROLLBACK TO SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (3); COMMIT;
上面的事务将插入数值 1 和 3 ,而不会插入 2 。
建立并稍后删除一个保存点:
BEGIN; INSERT INTO table1 VALUES (3); SAVEPOINT my_savepoint; INSERT INTO table1 VALUES (4); RELEASE SAVEPOINT my_savepoint; COMMIT;
上面的事务将插入 3 和 4 。
SQL 要求在另外一个同名保存点建立的时候自动删除前面那个同名保存点。 在PostgreSQL里,将保留旧的保存点,但是在回滚或者释放的时候, 只使用最近的那个。用RELEASE SAVEPOINT释放了新的保存点将导致旧的再次成为 ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT可以访问的保存点。 否则,SAVEPOINT是完全符合 SQL 标准的。