postgresql 关闭自动提交

1. 简介说明

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

2. 操作验证

[[email protected] ~]$ 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

[[email protected] ~]$ 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文件:

[[email protected] ~]$ cat .psqlrc

\set AUTOCOMMIT off

[[email protected] ~]$

4. 备注

         

但是这样设置了;也存在不习惯的地方。

1. 操作错误之后;执行正确的dml语句会报错“ERROR:  current transaction is aborted, commands ignored until end of transaction block”;避免是执行commit;或者rollback

[[email protected] ~]$ 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

[[email protected] ~]$ 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
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.

时间: 2024-10-14 14:06:03

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

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

// Jdbc关闭数据库连接时,会隐含一个提交事务的操作 private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver"; private final static String DB_CONNECTION = "jdbc:oracle:thin:@127.0.0.1:1521:mydb01"; private final static String DB_NAME = "

Mysql 关闭自动commit

1. 会话级关闭自动提交 mysql> set autocommit=off; Query OK, 0 rows affected (0.00 sec) mysql>  show variables like 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit    | OFF   | +---------------+-------+

MySQL控制(关闭、打开)自动提交功能

在MySQL中执行命令时,通常都直接被确定提交了.也就是说用户不用意识此事,所有的命令都会被自动COMMIT.特别是当存储引擎为MyISAM的情况下,本身它是不支持事务处理的,只要执行了命令,所有的命令部会被提交. 这样的默认自动提交的功能就被称为自动提交功能.自动提交功能默认被置为ON的状态.但是,如果存储引擎为InnoDB 时,当执行了START TRANSACTION或BEGIN命令(MySQL事务处理-删除后回滚)后,将不会自动提交了,只有明确执行了COMMIT命令后才会被提交,在这之前

Mybatis的JDBC提交设置/关闭mysql自动提交------关于mysql自动提交引发的惨剧

学习Mybatis时提到了JDBC方式需要自己手动提交事务,如果不加session.commit会导致数据库的数据无法正常插入(程序本身又不给你报错,还装出一副我已经插入成功的样子) SqlSession session = sessionFactory.openSession(); 如果要自动提交的话加个参数就好啦 SqlSession session = sessionFactory.openSession(true);//自动提交 手动提交的话 SqlSession session = s

事务与自动提交

事务与自动提交 现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的.事务支持四大特性(ACID):原子性(Atomicity).一致性(Consistency).隔离性(Isolation)以及持久性(Durability).通俗地讲,在一个事务中执行的任何操作,即使是分阶段执行的,也能保证安全地应用于数据库,并在提交时不会受到来自其他连接的干扰.事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易. 事务通常是通过把一批更改"积蓄&q

mysql自动提交

MySQL的autocommit(自动提交)默认是开启,其对mysql的性能有一定影响,举个例子来说,如果你插入了1000条数据,mysql会commit1000次的,如果我们把autocommit关闭掉,通过程序来控制,只要一次commit就可以了. 1,我们可以通过set来设置autocommit 2,我们可以修改mysql的配置文件my.cnf来关闭autocommit init_connect='SET autocommit=0'  #在mysqld里面加上这些内容 其他关于mysql事

MySQL Study之--MySQL关闭自动commit(autocommit)

MySQL Study之--MySQL关闭自动commit(autocommit)      对于mysql来讲,在事务处理时,默认是在动提交的(autocommit),以下方法可以自动关闭autocommit: 案例分析: 1.在mysql登录环境下修改 [[email protected] soft]# mysql -u root -pEnter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your M

PHP PDO 事务与自动提交

现在通过 PDO 连接上了,在开始进行查询前,必须先理解 PDO 是如何管理事务的. 事务支持四大特性(ACID): 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 通俗地讲,在一个事务中执行的任何操作,即使是分阶段执行的,也能保证安全地应用于数据库,并在提交时不会受到来自其他连接的干扰. 事务操作也可以根据请求自动撤销(假设还没有提交),这使得在脚本中处理错误更加容易. 事务通常是通过把一批更改"积蓄"起来

form自动提交

在做项目中,例如b2b的由商城跳往卖家中心的后台,当他既有会员账号又是卖家的时候,让他登录了商城,就不需要卖家登录的时候,处理过程中可以用到form表单自动登录. 实现简单思路:可以再普通会员登录的地方,登录成功可以将登录名和密码,用户id存起来,为了安全可以aes加密(前面一篇文章有详细介绍),存入cookie,在页面中需要去卖家中心,那边可以判断开始所存的cookie,以及判断是否是卖家,如果是,用form表单自动给他登录. 在ecshop上面实现的案例: 在includes下面创建一个li