文档章节

PostgreSQL事务的操作命令

YuanyuanL
 YuanyuanL
发布于 2015/05/15 16:48
字数 730
阅读 459
收藏 2
点赞 1
评论 0

   一、一般情况下,事务是自动提交的。参数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

粉丝 151
博文 225
码字总数 187115
作品 0
济南
部门经理
PostgreSQL 11 首个测试版发布:引入 JIT ,性能再提升

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

王练 ⋅ 05/25 ⋅ 21

PostgreSQL Freeze 风暴预测续 - 珍藏级SQL

标签 PostgreSQL , Freeze , 风暴 背景 PostgreSQL 目前默认的存储引擎,事务可见性需要依赖行头的事务号,因为事务号是32位的,会循环使用。 在一条记录产生后,如果再次经历了20亿个事务,...

德哥 ⋅ 05/06 ⋅ 0

PostgreSQL 垃圾版本引入的索引扫描性能下降诊断

标签 PostgreSQL , 索引 , 多版本 , 垃圾版本 , pageinspect 背景 首先介绍几个背景知识,由于这些背景知识的存在,所以在某些情况下索引扫描的性能可能会出现一些问题或抖动。 导致性能下降...

德哥 ⋅ 04/18 ⋅ 0

PostgreSQL 数据库初体验

高强,“DBA+济南群”联合发起人。现就职于山东华鲁科技发展股份有限公司。擅长Oracle、AIX、Linux、PostgreSQL和DB2等产品的实施、运维和故障处理。曾是一名存储工程师,负责实施存储、双机...

高强 ⋅ 2015/10/15 ⋅ 0

PostgreSQL 恢复大法 - 恢复部分数据库、跳过坏块、修复无法启动的数据库

标签 PostgreSQL , 恢复部分数据库 , 跳过坏块 , 修复无法启动的数据库 , 时间点恢复 , 逻辑备份 , 连续备份 背景 一个较大的数据库,如何只恢复一部分数据(例如只恢复某个DB)。 如果访问有...

德哥 ⋅ 04/18 ⋅ 0

EDB PPAS(Oracle 兼容版) Oracle与PostgreSQL 兼容模式的参数配置切换

标签 PostgreSQL , EDB , PPAS , 参数 , Oracle模式 , PostgreSQL模式 背景 EDB PPAS是EDB推出的一款同时兼容Oracle和PostgreSQL协议的数据库,在去O的场景中,使用非常广泛,价格便宜,同时...

德哥 ⋅ 05/06 ⋅ 0

数据库案例集锦 - 开发者的《如来神掌》

标签 PostgreSQL , PG DBA cookbook , PG Oracle兼容性 , PG 架构师 cookbook , PG 开发者 cookbook , PG 应用案例 背景 「剑魔独孤求败,纵横江湖三十馀载,杀尽仇寇,败尽英雄,天下更无抗...

德哥 ⋅ 2017/06/09 ⋅ 0

PostgreSQL 一主多从(多副本,强同步)简明手册 - 配置、压测、监控、切换、防脑裂、修复、0丢失 - 珍藏级

标签 PostgreSQL , 多副本 , 一主多从 , 流复制 背景 PostgreSQL物理流复制有几个特点 1、延迟及低,毫不畏惧大事务 2、支持断点续传 3、支持多副本 4、配置简单,看本文 5、备库与主库物理完...

德哥 ⋅ 04/18 ⋅ 0

PostgreSQL 分区表的逻辑复制(逻辑订阅)

标签 PostgreSQL , 分区表 , 逻辑复制 , 逻辑订阅 , 分区 背景 PostgreSQL 10 引入了内置分区语法,同时引入了逻辑订阅的功能。 《PostgreSQL 10.0 preview 逻辑订阅 - 原理与最佳实践》 逻辑...

德哥 ⋅ 05/06 ⋅ 0

写一个“特殊”的查询构造器 - (七、DML 语句、事务)

查询语句 (DQL) 的构造功能开发完毕,我们再给查询构造器增加一些对 DML (Data Manipulation Language) 语句的支持,如简单的 insert、update、delete 操作。 insert 我们先回顾下 PDO 原生的...

MrQ被抢注了 ⋅ 05/23 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Netweaver和SAP云平台的quota管理

Netweaver 以需要为一个用户上下文(User Context)能够在SAP extended memory区域中分配内存尺寸创建quota为例。 对于Dialog工作进程,使用事务码修改参数 ztta/roll_extension_dia. 对于非D...

JerryWang_SAP ⋅ 11分钟前 ⋅ 0

IDEA提示编码速度

焦点移动 将焦点冲代码编辑窗口移动到菜单栏:Alt+菜单栏带下划线字母 将焦点从工具窗口移动到代码编辑窗口 Esc或Shift+Esc 将焦点从代码编辑移动到最近使用的工具窗口 F12 模板提示 Ctrl+J...

bithup ⋅ 20分钟前 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 44分钟前 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 51分钟前 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

python3.6 安装pyhook_3

我的是在win下的,忙了半天老是安装不了, pip install 也不行。 那么可以看出自己的版本是32bit 一脸懵逼 没办法 只好下载32版本的来安装 我一直以为 是 对应32 位的 。 下面是 小例子 http...

之渊 ⋅ 今天 ⋅ 0

004、location正则表达式

1、location的作用 location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作。 2、location的语法 = 开头表示精确匹配 ^~...

北岩 ⋅ 今天 ⋅ 0

CentOS7 静默安装 Oracle 12c

环境 CentOS7.5 最小安装 数据库软件 linuxx64_12201_database.zip 操作系统配置 关闭 SELinux sed -i '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config 关闭防火墙 systemctl disable ......

Colben ⋅ 今天 ⋅ 0

Yii2中findAll()的正确使用姿势/返回为空的处理办法

从一次错误的操作开始 $buildingObject = Building::findAll("status=1"); 1 这个调用看着没有任何毛病,但是在使用时返回的结果却是一个空数组。再回过头来看看数据表中: 按照套路来讲,查...

dragon_tech ⋅ 今天 ⋅ 0

如何优雅的编程——C语言界面的一点小建议

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以...

柳猫 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部