Postgresql保存点(savepoint)功能

原创 2015年11月17日 20:28:32

PG数据库保存点

PG数据库支持保存点(savepoint)功能,在比较大的事务中,可以把执行过程分为几个步骤,每个步骤执行完成后创建一个保存点,后续步骤执行失败时,可回滚到之前的保存点,而不必回滚整个事务。

  • 示例如下:
TEST=# select * from test;
 id | value1 | value2
----+--------+--------
  1 |      1 |      1
  2 |      2 |      2
  3 |      3 |      3
  4 |      4 |      4
  5 |      5 |      5
  6 |      6 |      6
  7 |      7 |      7
  8 |      8 |      8
  9 |      9 |      9
(9 行记录)

TEST=# begin;
BEGIN
TEST=# update test set value1=10 where id=1;
UPDATE 1
TEST=# update test set value1=10 where id =2;
UPDATE 1
TEST=# savepoint mysp1;
SAVEPOINT
TEST=#
TEST=# update test set value1=10 where id=3;
UPDATE 1
TEST=# select * from test;
 id | value1 | value2
----+--------+--------
  4 |      4 |      4
  5 |      5 |      5
  6 |      6 |      6
  7 |      7 |      7
  8 |      8 |      8
  9 |      9 |      9
  1 |     10 |      1
  2 |     10 |      2
  3 |     10 |      3
(9 行记录)

TEST=# rollback to savepoint mysp1;
ROLLBACK
TEST=# select * from test;
 id | value1 | value2
----+--------+--------
  3 |      3 |      3
  4 |      4 |      4
  5 |      5 |      5
  6 |      6 |      6
  7 |      7 |      7
  8 |      8 |      8
  9 |      9 |      9
  1 |     10 |      1
  2 |     10 |      2
(9行记录)

TEST=# commit;
COMMIT
TEST=# select * from test;
 id | value1 | value2
----+--------+--------
  3 |      3 |      3
  4 |      4 |      4
  5 |      5 |      5
  6 |      6 |      6
  7 |      7 |      7
  8 |      8 |      8
  9 |      9 |      9
  1 |     10 |      1
  2 |     10 |      2
(9 行记录)

如上,执行两次update操作,分别把id=1 和 id=2的两条数据的value1更新为10。
然后创建一个savepoint mysp1。
再执行update语句把id=3的value1更新为10.
此时查询全部数据可以看到,id为1,2,3的三条数据的value1都被更新为了10.
执行rollback操作,回滚到保存点mysp1,查询全部数据,可以看到只有id=3的update操作被回滚,但是id=1,2的数据没有被回滚。
执行commit操作提交整个事务,再次查询全部数据,依然是id=1,2的数据被更新,id=3的数据未更新。
这就是PG的保存点功能。

版权声明:本文为博主原创文章,未经博主允许不得转载。

mysql savepoint 示例

SET SQL_SAFE_UPDATES=0; update books set free =1, new=1; commit; SET AUTOCOMMIT=1; begin; select fr...

4.事务提交过程,事务基本概念,Oracle中的事务生命周期,保存点savepoint,数据库的隔离级别

 事务提交过程 事务 基本概念 概念:一个或者多个DML语言组成 特点...

savepoint(回退点)

什么是savepoint? Use  the SAVEPOINT statement to identify a point in a transaction to which you can  ...

postgresql 函数增加调试功能

postgresql数据库在使用过程中,发现没有调试存储过程的功能,网上查找,默认是没有安装的,需要自己安装插件。记录一下安装过程: 1、打开pgadmin 的postgresq配置 2、找到...

Postgresql数据库权限功能小结

Postgresql数据库权限功能小结Postgresql数据库支持灵活的权限管理,可以控制一个角色(组、用户)对某张表的读、写、更新、删除等操作权限、执行某个函数的权限以及操作(使用、更新等)视图、...

PostgreSQL热备功能实施手册

一.部署说明 1.1 实施环境 本文档实验环境如下: PGSQL主机: 192.168.200.231 PGSQL备机: 192.168.200.230 PGPool主机: 192.168.200.2...

PostgreSQL如何实现MySQL中的group_concat聚集函数(简单的拼接功能)

1.postgreSQL中没有现成的group_concat聚集函数 2.postgreSQL可以自定义聚集函数一.首先我们要知道MySQL中的group_concat聚集函数是干什么的? gro...

C#定时执行某一个功能二(解压并读取xml到postgresql)

继上一篇: C#定时执行某一个功能一(sqlite导出xml并压缩) 下面我要来讲一下:如何对这些xml解压,读取到postgresql数据库中 依旧是两种方案:1、windows服务;2、控制台...

PostgreSQL数据库取外部数据的扩展功能

Foreign Data Wrappers是PostgreSQL取得外部数据比较方便的功能扩展。 可以取得关系数据库的数据,比如Oracle,MySQL,ODBC. 还可以取得NOSQL数据库的数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Postgresql保存点(savepoint)功能
举报原因:
原因补充:

(最多只允许输入30个字)