文章 > PostgreSQL 讨论区 > 【PG】PG的自动提交参数设置前后对比以及自动提交开关

【PG】PG的自动提交参数设置前后对比以及自动提交开关

153****5616 · 2023-11-09 859 PostgreSQL 讨论区
分享 收藏

PG的自动提交参数设置前后对比

        默认条件下PostgreSQL自动提交参数是打开的状态,避免人为的手动提交,也就是说不需要每次去commit。因为在PostgreSQL里面默认是自动提交;执行完毕就马上提交,不能回滚,但是可以手动关闭自动提交。

一、自动提交参数设置前后对比

           

image.png

             有*号代表有操作未提交或回滚。

             默认为开启的状态下:

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

                      如若显示为如下,则说明自动提交是打开的:

image.png

                      可以使用以下命令可以禁用自动提交:

   \set AUTOCOMMIT off

  通过以上 命令将自动提交禁用。但是注意,这种禁用方式只是仅对当前session有效。

点击加载更多