20181218 - PostgreSQL Auto Commit Guide(自動提交)


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參數,退出客戶端失效


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM