文档章节

PostgreSQL事务的操作命令

YuanyuanL
 YuanyuanL
发布于 2015/05/15 16:48
字数 730
阅读 745
收藏 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

粉丝 152
博文 322
码字总数 188376
作品 0
济南
部门经理
私信 提问
PostgreSQL体系结构小结

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

YuanyuanL
2015/08/26
0
0
postgresql数据库体系结构

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

一个笨小孩
07/19
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
4.4K
21
PostgreSQL学习手册(十四) 系统视图

一、pg_tables: 该视图提供了对有关数据库中每个表的有用信息地访问。 名字 类型 引用 描述 schemaname name pg_namespace.nspname 包含表的模式名字。 tablename name pg_class.relname 表的...

长平狐
2012/09/06
24
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu18.04 安装MySQL

1.安装MySQL sudo apt-get install mysql-server 2.配置MySQL sudo mysql_secure_installation 3.设置MySQL非root用户 设置原因:配置过程为系统root权限,在构建MySQL连接时出现错误:ERROR...

AI_SKI
今天
3
0
3.6 rc脚本(start方法) 3.7 rc脚本(stop和status方法) 3.8 rc脚本(以daemon方式启动)

3.6-3.7 rc脚本(start、stop和status方法) #!/usr/bin/env python# -*- coding: utf-8 -*-# [@Version](https://my.oschina.net/u/931210) : python 2.7# [@Time](https://my.oschina.......

隐匿的蚂蚁
今天
3
0
Cnn学习相关博客

CNN卷积神经网络原理讲解+图片识别应用(附源码) 笨方法学习CNN图像识别系列 深度学习图像识别项目(中):Keras和卷积神经网络(CNN) 卷积神经网络模型部署到移动设备 使用CNN神经网络进行...

-九天-
昨天
5
0
flutter 底部输入框 聊天输入框 Flexible

想在页面底部放个输入框,结果键盘一直遮住了,原来是布局问题 Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("评论"), ...

大灰狼wow
昨天
4
0
Kernel I2C子系统

备注:所有图片来源于网络 1,I2C协议: 物理拓扑: I2C总线由两根信号线组成,一条是时钟信号线SCL,一条是数据信号线SDA。一条I2C总线可以接多个设备,每个设备都接入I2C总线的SCL和SDA。I...

yepanl
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部