合 PG中的自动提交(AUTOCOMMIT)
Tags: PG事务AUTOCOMMIT
Oracle中sqlplus里面执行DML语句,是需要提交commit;若错了,也可以回滚rollback; PostgreSQL psql里面默认是自动提交;执行完就马上提交,不能回滚,但是可以关闭自动提交。
AutoCommit基于客户端(psql、pgadmin等等)SESSION连接参数AUTOCOMMIT,数据库SERVER端不进行控制。
SET AUTOCOMMIT
SET AUTOCOMMIT — 设置当前会话的自动提交行为。
大纲
1 | SET AUTOCOMMIT { = | TO } { ON | OFF } |
描述
SET AUTOCOMMIT
设置当前数据库会话的自动提交行为。默认情况下,嵌入式 SQL 程序不\在自动提交模式中,因此需要显式地发出COMMIT
。这个命令可以把会话改成自动提交模式,这样每一个单独的语句都会被隐式提交。
兼容性
SET AUTOCOMMIT
是 PostgreSQL ECPG 的扩展。
注意
这里的AUTOCOMMIT
是大写的,不能使用小写。如果使用小写,虽不会报错,但会使该命令无效。
一些配置方式
1.检查当前AUTOCOMMIT参数值
1 2 | postgres=# \echo :AUTOCOMMIT on |
2.修改当前AUTOCOMMIT参数值为OFF
1 | postgres=# \set AUTOCOMMIT off |
3.检查修改的AUTOCOMMIT参数值是否为OFF
1 2 | postgres=# \echo :AUTOCOMMIT off |
4.仅限于psql工具
客户端所在系统用户执行以下语句,家目录下生成.psqlrc
倒数第二个代码段中感觉不对啊。
已经关闭了自动提交,创建test_auto_commit、向test_auto_commit插入1111,rollback之后。
再查询test_auto_commit的时候,应该提示表不存在才对,因为整个事务块都回滚了。
不应该提示:
postgres=# rollback ;
ROLLBACK
postgres=# select * from test_auto_commit ;
id
(0 rows)
已修复,感谢提醒。