20181218 - PostgreSQL Auto Commit Guide
參考官網簡介,https://www.postgresql.org/docs/10/ecpg-sql-set-autocommit.html
一、功能簡介
Oracle中sqlplus里面執行DML語句;是需要提交commit;若錯了;也可以回滾rollback; PostgreSQL psql里面默認是自動提交;執行完就馬上提交,不能回滾,可以關閉自動提交。
AutoCommit基於客戶端(psql、pgadmin等等)SESSION連接參數AUTOCOMMIT,數據庫SERVER端不進行控制;
二、操作驗證
條件一、默認開啟自動提交autocommit功能
postgres=# \echo :AUTOCOMMIT
on
postgres=# create table test_auto_commit(id int);
CREATE TABLE
postgres=# insert into test_auto_commit values (1111);
INSERT 0 1
postgres=# update test_auto_commit SET id = 1000 where id = 1111;
UPDATE 1
postgres=# select * from test_auto_commit ;
id
------
1000
(1 row)
postgres=# delete from test_auto_commit where id = 1000;
DELETE 1
postgres=# select * from test_auto_commit ;
id
----
(0 rows)
結論:psql默認開啟AUTOCOMMIT參數為on,INSERT、UPDATE、DELETE均無需顯式輸入commit命令,由客戶端SESSION自動添加;
條件二、關閉默認開啟自動提交auto_commit功能
postgres=# \set AUTOCOMMIT off
postgres=# \echo :AUTOCOMMIT
off
postgres=# create table test_auto_commit(id int);
CREATE TABLE
# INSERT 驗證
postgres=# select * from test_auto_commit ;
id
----
(0 rows)
postgres=# insert into test_auto_commit values (1111);
INSERT 0 1
postgres=# select * from test_auto_commit ;
id
------
1111
(1 row)
postgres=# rollback ;
ROLLBACK
postgres=# select * from test_auto_commit ;
id
----
(0 rows)
# UPDATE
postgres=# update test_auto_commit SET id = 1000 where id = 1111;
UPDATE 1
postgres=# select * from test_auto_commit ;
id
------
1000
(1 row)
postgres=# rollback;
ROLLBACK
postgres=# select * from test_auto_commit ;
id
------
1111
(1 row)
#DELETE
postgres=# select * from test_auto_commit ;
id
------
1111
(1 row)
postgres=# delete from test_auto_commit where id = 1111;
DELETE 1
postgres=# select * from test_auto_commit ;
id
----
(0 rows)
postgres=# rollback;
ROLLBACK
postgres=# select * from test_auto_commit ;
id
------
1111
(1 row)
postgres=# delete from test_auto_commit where id = 1111;
DELETE 1
postgres=# commit;
COMMIT
postgres=# select * from test_auto_commit ;
id
----
(0 rows)
結論:修改psql默認開啟AUTOCOMMIT參數為off,INSERT、UPDATE、DELETE均需顯式輸入commit命令,由客戶端SESSION不會自動添加;
三、修改方法
1.檢查當前AUTOCOMMIT參數值
postgres=# \echo :AUTOCOMMIT
on
2.修改當前AUTOCOMMIT參數值為OFF
postgres=# \set AUTOCOMMIT off
3.檢查修改的AUTOCOMMIT參數值是否為OFF
postgres=# \echo :AUTOCOMMIT
off
4.僅限於psql工具
客戶端所在系統用戶執行以下語句,家目錄下生成.psqlrc
$ echo "\set AUTOCOMMIT off" >>$HOME/.psqlrc
四、注意事項
設置后同時影響本 session,及以后的語句;客戶端內臨時修改AUTOCOMMIT參數,退出客戶端失效