文档章节

PostgreSQL事务的操作命令

YuanyuanL
 YuanyuanL
发布于 2015/05/15 16:48
字数 730
阅读 554
收藏 2

   一、一般情况下,事务是自动提交的。参数autocommit控制事务是否自动提交。

postgres=# show autocommit;
 autocommit
------------
 on

   

二、开启一个事务的命令有:

    http://www.postgresql.org/docs/9.4/static/sql-begin.html

    http://www.postgresql.org/docs/9.4/static/sql-start-transaction.html

      1.  BEGIN; 

      2.  START TRANSACTION [ transaction_mode [, ...] ]

这里的 transaction_mode是下列之一:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY
    [ NOT ] DEFERRABLE
postgres=# begin;
BEGIN
postgres=# start transaction;
START TRANSACTION


 三、 设置事务的模式

     http://www.postgresql.org/docs/9.1/static/sql-set-transaction.html

SET TRANSACTION transaction_mode [, ...]
SET TRANSACTION SNAPSHOT snapshot_idSET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...] 
这里的 transaction_mode是下列之一:
    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY
    [ NOT ] DEFERRABLE

例如:用一个早已存在的事务的相同快照开始一个新的事务。

      首先从现存事务中输出快照。 这将返回快照的标识符,例如:

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; --启动时设置事务的隔离级别;
SELECT pg_export_snapshot();
pg_export_snapshot
--------------------
000003A1-1
(1 row)

      然后在新打开的事务的开始的SET TRANSACTION SNAPSHOT命令中给出快照标识符:

BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ; --启动时设置事务的隔离级别;
SET TRANSACTION SNAPSHOT '000003A1-1';


四、结束事务的命令有:

   http://www.postgresql.org/docs/9.4/static/sql-commit.html

   http://www.postgresql.org/docs/9.4/static/sql-rollback.html

  1. 提交 commit;

  2. 回滚 rollback;

postgres=# commit;
COMMIT
postgres=# rollback;
ROLLBACK

 

五、预备事务

       创建预备事务,是为当前事务分阶段提交做准备的。  

     http://www.postgresql.org/docs/9.4/static/sql-prepare-transaction.html

PREPARE TRANSACTION 'transaction_tag';

   PREPARE TRANSACTION为当前事务的分阶段提交做准备。在命令之后, 事务就不再和当前会话关联了;它的状态完全保存在磁盘上,它提交成功有非常高的可能性, 即使是在请求提交之前数据库发生了崩溃也如此。

     例如:把当前事务为阶段提交做准备,使用foobar做为事务标识符:

PREPARE TRANSACTION 'foobar';

      提交预备事物,提交一个早先为分阶段提交的预备事务。

      http://www.postgresql.org/docs/9.4/static/sql-commit-prepared.html

COMMIT PREPARED transaction_id

      注意:要提交一个预处理的事务,你必须是最初执行该事务的用户或超级用户。 不过你不必在同一个会话里执行该命令。

      这条命令不能在事务块里执行。预处理的事务立即提交。

      所有目前可用的预处理事务都在系统视图pg_prepared_xacts里列出。

       例如:提交事务标识符foobar标识的事务:

COMMIT PREPARED 'foobar';

     完整例子:

     首先要启动prepare transaction,否则的话会报如下错误:

postgres=# prepare transaction 'dd';
ERROR:  prepared transactions are disabled
提示:  Set max_prepared_transactions to a nonzero value.
postgres=# set max_prepared_transactions=2;
ERROR:  parameter "max_prepared_transactions" cannot be changed without restarti
ng the server

    要启动要启动prepare transaction,需要到postgresql.conf配置文件中,将参数max_prepare_transactions设置为非零的值,然后重启数据库服务即可。

postgres=# begin transaction;
BEGIN
postgres=# insert into jnkx.test values(2,'dd');
INSERT 0 1
postgres=# prepare transaction 'c';
PREPARE TRANSACTION
postgres=# select * from jnkx.test;
 id | name
----+------
  1 | dd
postgres=# commit prepared 'c';
COMMIT PREPARED
postgres=# select * from jnkx.test;
 id | name
----+------
  1 | dd
  2 | dd



© 著作权归作者所有

共有 人打赏支持
YuanyuanL

YuanyuanL

粉丝 153
博文 319
码字总数 187682
作品 0
济南
部门经理
postgresql数据库体系结构

postgresql数据库是由:连接管理系统(系统控制器)、编译执行系统、存储管理系统、事务系统、系统表 五大部分组成。 ①:连接管理系统:接收外部操作对系统的请求,对操作请求进行预处理和分...

一个笨小孩
07/19
0
0
PostgreSQL体系结构小结

 参考:http://book.51cto.com/art/201201/313175.htm 体系架构 PostgreSQL数据库由连接管理系统(系统控制器)、编译执行系统、存储管理系统、事务系统、系统表五大部分组成,其组成结构和...

YuanyuanL
2015/08/26
0
0
PostgreSQL DBA快速入门(四) - 体系架构

PostgreSQL在开源关系型数据库市场是最先进的数据库。他的第一个版本在1989年发布,从那时开始,他得到了很多扩展。根据db-enginers上的排名情况,PostgreSQL目前在数据库领域排名第四。 本篇...

闻术苑
08/02
0
0
PostgreSQL 11 首个测试版发布:引入 JIT ,性能再提升

PostgreSQL 11 首个 Beta 测试版已发布,包含 PostgreSQL 11 最终版本中可用的所有特性的预览。当然,部分细节可能最终会有所变化。 PostgreSQL 11 的主要特性集中在性能、更大的数据集以及易...

王练
05/25
0
21
Postgresql 数据库控制解析(一)

前面我们通过“探索postgresql数据库(一)”和“探索postgresql数据库(二)”基本了解了postgresql数据库。接下来本文开始介绍下数据库控制(server control)。。 一、手动开启数据库(S...

章郎虫
2013/10/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

异步化,高并发大杀器

今天来聊聊如何让项目异步化的一些事。 在进入正文之前,顺便给大家推荐一个Java架构方面的交流学习群:698581634,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分...

Java大蜗牛
6分钟前
0
0
织梦dedecms安全设置

网站本身做好防范: 1、修改默认后台名。 打开网站根目录,找到[dede],这个文件夹就是后台的路径,可以随意修改,比如修改为[adminbuy],此时后台登陆的路径为:http://www.*****.com/admi...

雨季2014
6分钟前
0
0
完美Python入门基础知识点总结,看完你的Python就完全入门了!

Python标识符 在 Python 里,标识符有字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的。 以下划线...

糖宝lsh
12分钟前
0
0
Java关于前后台传输中文乱码以及Excel下载乱码解决

针对乱码,一般情况是前后台以及中间件编码格式不同导致.故需要保证编码格式相同即可. 1.前台页面格式指定,这里用的是jsp,故需要将pageEncoding指定为"UTF-8" 2.指定服务器编码格式,比如用的t...

勤奋的蚂蚁
14分钟前
0
0
Flutter组件 - Flexible

Flexible是一个控制Row、Column、Flex等子组件如何布局的组件。 Flexible组件可以使Row、Column、Flex等子组件在主轴方向有填充可用空间的能力(例如,Row在水平方向,Column在垂直方向),但是...

一箭落旄头
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部