SAVEPOINT

SAVEPOINT —在当前事务中定义一个新的保存点

Synopsis

SAVEPOINT savepoint_name

Description

SAVEPOINT在当前事务中构建一个新的保存点。

保存点是事务中的特殊标记,它允许回滚在构建事务后执行的所有命令,从而将事务状态恢复到保存点时的状态。

Parameters

  • savepoint_name

    • 赋予新保存点的名称。

Notes

使用回滚到保存点回滚到保存点。使用RELEASE SAVEPOINT销毁一个保存点,保留构建后执行的命令的效果。

只能在事务块内部构建保存点。事务中可以定义多个保存点。

Examples

要构建一个保存点,以后撤消构建保存点后执行的所有命令的效果:

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;

上述 Transaction 将同时插入 3 和 4.

Compatibility

构建另一个具有相同名称的保存点时,SQL 要求自动删除一个保存点。在 PostgreSQL 中,保留了旧的保存点,尽管在回滚或释放时仅使用较新的保存点。 (用RELEASE SAVEPOINT删除较新的保存点将使ROLLBACK TO SAVEPOINTRELEASE SAVEPOINT再次可以访问较旧的保存点.)否则,SAVEPOINT完全符合 SQL。

See Also

BEGIN, COMMIT, RELEASE SAVEPOINT, ROLLBACK, 回滚到保存点