PG的自动提交参数设置前后对比
默认条件下PostgreSQL自动提交参数是打开的状态,避免人为的手动提交,也就是说不需要每次去commit。因为在PostgreSQL里面默认是自动提交;执行完毕就马上提交,不能回滚,但是可以手动关闭自动提交。
一、自动提交参数设置前后对比
有*号代表有操作未提交或回滚。
默认为开启的状态下:
postgres=# create table test1(id int); CREATE TABLE postgres=# insert into test1 values(100); INSERT 0 1 postgres=# select * from test1; id ----- 100 (1 行记录) postgres=# update test1 set id=101 where id=100; UPDATE 2 postgres=# select * from test1; id ----- 101 101 (2 行记录) postgres=# delete from test1 where id = 101; DELETE 2 postgres=# select * from test1; id ---- (0 行记录)
postgresql默认开启autoaommit参数为on,insert,update,delete均不需要显式输入commit命令,由客户端session自动添加;
然后将postgresql的自动提交先禁用,命令如下:
postgres=# \echo :AUTOCOMMIT; on; postgres=# \set AUTOCOMMIT off; "AUTOCOMMIT"的不能识别的值"off;":应为布尔值 postgres=# \set AUTOCOMMIT off postgres=# \echo :AUTOCOMMIT; off;
通过以下的查询插入我们可以看到并没有被提交:
postgres=# select * from mh; id ----- 100 (1 行记录) postgres=*# insert into mh values(101); INSERT 0 1 postgres=*# select * from mh; id ----- 100 101 (2 行记录) postgres=*# commit; COMMIT postgres=#
可以看到如果参数修改为autocommit参数修改为off的时候,我们在进行操作的时候并没有被提交,因为在每个语句的时候都有一个*,而这个*号代表没有被提交,需要我们每次手动的提交,也就是说需要我们显式的输入commit来进行提交。而没有被提交说明在进行insert,delete,update的时候都会在事务中暂时保存,如果事务执行过程中遇到错误或者需要回滚更改,可以使用ROLLBACK命令来取消事务。
二、禁用自动提交的方法
方法一:使用命令行标志关闭自动提交
在启动PostgreSQL时,可以使用命令行标志"-o"或者"-options"来禁用自动提交,命令如下:
pg_ctl -D /home/mh/dest -l logfile -o "-c autocommit=off" start
启动postgresql,并将参数autocommit设置为off,从而禁用自动提交。这种方式从启动数据库后所有的事务场景都会禁用自动提交。
方法二: 在配置文件中设置参数
通过修改posthgresql的配置文件,在其中添加特定的参数设置。首先找到postgresql的配置文件postgresql.conf,默认情况下,它位于数据目录下面~/pgsql/data/postgresql;打开配置文件以后找到"- connection Setting"部分,然后在该部分添加以下命令:
autocommit = off
然后保存并关闭文件,然后刷新配置文件通过以下命令:
pg_ctl reload
通过以上命令使得更改生效,然后自动提交就会被禁用。这种禁用方式会将自动提交终身禁用,除非在配置文件中手动修改,否则以后就直接一直禁用。
方法三:在数据库内部禁用自动提交
首先是查看自动提交的当前状态:
\echo :AUTOCOMMIT
如若显示为如下,则说明自动提交是打开的:
可以使用以下命令可以禁用自动提交:
\set AUTOCOMMIT off
通过以上 命令将自动提交禁用。但是注意,这种禁用方式只是仅对当前session有效。
点击加载更多