1. 简介说明
 
          我们知道oracle中sqlplus里面执行dml语句;是需要提交commit;若错了;也可以回滚rollback; 然而在postgresql里面默认是自动提交;执行完就马上提交了,不能回滚,这样容易导致误操作的发生,有没有什么办法避免这个风险呢?当然有,在psql中默认是打开自动提交的,我们可以关闭自动提交。
 

2. 操作验证

 
[postgres@oracle2 ~]$ psql -U lottu -d xzfb
psql (9.5.0)
Type "help" for help.
 
xzfb=> create table lottu01(id int);
CREATE TABLE
xzfb=> select * from lottu01;
 id 
----
(0 rows)
 
xzfb=> insert into lottu01 values (1001);
INSERT 0 1
xzfb=> rollback
xzfb-> ;
WARNING:  there is no transaction in progress
ROLLBACK
xzfb=> select * from lottu01;
  id  
------
 1001
(1 row)
 
从上面操作下;postgresql是自动提交的;如何关闭呢;执行 \set AUTOCOMMIT off
 
[postgres@oracle2 ~]$ psql -U lottu -d xzfb
psql (9.5.0)
Type "help" for help.
 
xzfb=> \set AUTOCOMMIT off
xzfb=> insert into lottu01 values (1002); 
INSERT 0 1
xzfb=> commit;                                            --1002此处提交
COMMIT
xzfb=> insert into lottu01 values (1003);
INSERT 0 1
xzfb=> rollback;                                           --1003回滚了
ROLLBACK
xzfb=> select * from lottu01;
  id  
------
 1001
 1002
(2 rows)
 

3. 自动关闭提交


如果每次进入psql后都手工设置\set AUTOCOMMIT off比较麻烦,可以把这句设置到.psqlrc文件:
 
[postgres@oracle2 ~]$ cat .psqlrc
\set AUTOCOMMIT off
[postgres@oracle2 ~]$ 
 
 

4. 备注

         
 
但是这样设置了;也存在不习惯的地方。
         1. 操作错误之后;执行正确的dml语句会报错“ERROR:  current transaction is aborted, commands ignored until end of transaction block”;避免是执行commit;或者rollback
     
[postgres@oracle2 ~]$ psql -U lottu -d xzfb
psql (9.5.0)
Type "help" for help.
 
xzfb=> insert into lottu01 values ('1523');
INSERT 0 1
xzfb=> insert into lottu01 values ('a1523');              --插入字符串。
ERROR:  invalid input syntax for integer: "a1523"
LINE 1: insert into lottu01 values ('a1523');
                                    ^
xzfb=> insert into lottu01 values (1523);            --执行正确的dml语句会报错
ERROR:  current transaction is aborted, commands ignored until end of transaction block
xzfb=> rollback;                            --避免下面继续报错
ROLLBACK
xzfb=> insert into lottu01 values (1523);
INSERT 0 1
 
2. 执行ddl语句;也是需要执行commit,当然也可以rollback
 
xzfb=> create table t(id int);
CREATE TABLE
xzfb=> select * from t;
 id 
----
(0 rows)
 
xzfb=> \q
[postgres@oracle2 ~]$ psql -U lottu -d xzfb
psql (9.5.0)
Type "help" for help.
 
xzfb=> select * from t;
ERROR:  relation "t" does not exist
LINE 1: select * from t;
                      ^

3. 上面除了设置关闭自动提交;我们也可以通过begin end;去执行。略

 
 
 

作者 : li0924
时间 : 2016-01-22
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

postgresql 关闭自动提交的更多相关文章

  1. KingbaseES V8R6 ksql 关闭自动提交

    背景 用过oracle或mysql的人都知道,做一个dml语句,如果发现做错了,还可以rollback,但在Kingbase ksql 中,如果执行一个dml,没有先运行begin; 的话,一执行完就 ...

  2. sql小技巧——关闭自动提交,防止误操作

    set IMPLICIT_TRANSACTIONS ON--关闭自动提交on 防止误操作,除非显式提交commit后,才会真正提交到数据库中,并且可以随时回滚操作.如下: set IMPLICIT_T ...

  3. 20181218 - PostgreSQL Auto Commit Guide(自动提交)

    20181218 - PostgreSQL Auto Commit Guide 参考官网简介,https://www.postgresql.org/docs/10/ecpg-sql-set-autoc ...

  4. MysqL自动提交机制的关闭

    MysqL在执行一句数据库操作命令的时候,通常都是自动提交的.常用引擎下有两种,分别是MyIsam和InnoDB,MyIsam是不支持事务处理的,但InnoDB支持,但InnoDB在不开启事务处理的情 ...

  5. JDBC 关闭数据库连接与自动提交【转】

    // Jdbc关闭数据库连接时,会隐含一个提交事务的操作 private final static String DB_DRIVER = "oracle.jdbc.driver.Oracle ...

  6. 14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚

    14.3.2.2 autocommit, Commit, and Rollback 自动提交 提交和回滚 如果自动提交模式被启用,在InnoDB里, 所有的用户活动发生在一个事务里, 每个SQL语句 ...

  7. Mysql 关闭自动commit

    更多内容推荐微信公众号,欢迎关注: 1. 会话级关闭自动提交 mysql> set autocommit=off; Query OK, 0 rows affected (0.00 sec) my ...

  8. 【PostgreSQL-9.6.3】如何实现非自动提交

    我们在使用psql工具操作数据库时,事务是自动提交的.也就是说,当我们执行完一条insert或者delete语句后,在不输入commit情况下,这条语句也是提交的.如果不想自动提交,可以使用以下两种方 ...

  9. pymssql默认关闭自动模式开启事务行为浅析

    使用Python采集SQL Server数据库服务器磁盘信息时,遇到了一个错误"CONFIG statement cannot be used inside a user transacti ...

随机推荐

  1. autorelease基本概念

    // //  main.m //  01-autorelease基本概念 // //  Created by apple on 14-3-18. //  Copyright (c) 2014年 app ...

  2. 导出iPhone中安装的APP的iPA文件

    1.让iPhone连接电脑,打开iTunes,选择本电脑,然后点立即备份. 2.完成上一步的操作之后,选择应用,在iTunes中就会列出你从App Store中下载的应用,自己连接真机调试的应用是没有 ...

  3. Compile Sources 和 Copy Bundle Resources的区别

    Compile Sources主要存放.m文件 Copy Bundle Resources 主要存放xib plist bundle js 文件

  4. G面经prepare: Sort String Based On Another

    Given a sorting order string, sort the input string based on the given sorting order string. Ex sort ...

  5. [转]Web程序员必须知道的 Console 对象里的九个方法

    一.显示信息的命令 01 1: <!DOCTYPE html> 02  2: <html> 03  3: <head> 04  4:     <title&g ...

  6. eclipse批量删除断点(转)

    1.首先调出BreakPoints选项卡(Window--show View--Other--BreakPoints). 2.选择BreakPoints选项卡,选择所有断点,点击删除即可. 

  7. CCF真题之ISBN号码

    201312-2 问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上 ...

  8. @有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不

    @有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中 2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不加@那么需要用一些转义符\来显示一些特 ...

  9. Mysql 修改字段长度、修改列名、新增列

    alter table 表名 modify column 字段名 类型; 例如 数据库中user表 name字段是varchar(30) 可以用 ) ; --修改字段长度 )--修改表列名 ); -- ...

  10. sql 修改字段长度以及其他属性

    修改字段长度 语法 :alter table <表名> alter column <字段名> 新类型名(长度) alter  table  LoaneeExpand   alt ...