SAVEPOINT

定义新保存点的SQL命令

SAVEPOINT 是一个用于定义新保存点的交易命令。

SAVEPOINTPostgreSQL 8.0 中添加。

用法

保存点是在使用 SAVEPOINT 命令创建的事务中创建的用户定义标记,可以回滚到该标记而不会使整个事务失效。

保存点必须命名;名称可以是任意的,但必须遵循与其他数据库对象(如表和列标识符)相同的规则;有关更多详细信息,请参阅PostgreSQL文档部分“标识符和关键字”。

更改历史记录

示例

SAVEPOINT 的基本用法

postgres=# BEGIN;
BEGIN

postgres=*# SELECT 1;
 ?column?
----------
        1
(1 row)

postgres=*# SAVEPOINT s1;
SAVEPOINT

postgres=*# SELECT foo;
ERROR:  column "foo" does not exist
LINE 1: SELECT foo;
               ^

postgres=!# ROLLBACK TO SAVEPOINT s1;
ROLLBACK

postgres=*# SELECT 2;
 ?column?
----------
        2
(1 row)

postgres=*# COMMIT;
COMMIT

请注意,保存点只能在事务块内使用

postgres=# SAVEPOINT s1;
ERROR:  SAVEPOINT can only be used in transaction blocks

在事务错误后无法建立保存点

postgres=# BEGIN;
BEGIN

postgres=*# SELECT foo;
ERROR:  column "foo" does not exist
LINE 1: SELECT foo;
               ^
postgres=!# SAVEPOINT foo;
ERROR:  current transaction is aborted, commands ignored until end of transaction block

有效的保存点名称

postgres=*# SAVEPOINT foo;
SAVEPOINT

postgres=*# SAVEPOINT _foo;
SAVEPOINT

postgres=*# SAVEPOINT foo_bar_1;
SAVEPOINT

postgres=*# SAVEPOINT über1;
SAVEPOINT

postgres=*# SAVEPOINT テスト; SAVEPOINT
postgres=*# SAVEPOINT "123"; SAVEPOINT postgres=*# SAVEPOINT "[foo]"; SAVEPOINT

无效的保存点名称

postgres=*# SAVEPOINT 1;
ERROR:  syntax error at or near "1"
LINE 1: SAVEPOINT 1;
                  ^

postgres=*# SAVEPOINT [foo];
ERROR:  syntax error at or near "["
LINE 1: SAVEPOINT [foo];
                  ^

分类

SQL命令事务命令事务

参见

RELEASE SAVEPOINTROLLBACK TO SAVEPOINT

反馈

提交任何关于“SAVEPOINT”的评论、建议或更正 此处