1. 簡介說明 我們知道oracle中sqlplus裡面執行dml語句;是需要提交commit;若錯了;也可以回滾rollback; 然而在postgresql裡面預設是自動提交;執行完就馬上提交了,不能回滾,這樣容易導致誤操作的發生,有沒有什麼辦法避免這個風險呢?當然有,在psql中預設是...
1. 簡介說明
我們知道oracle中sqlplus裡面執行dml語句;是需要提交commit;若錯了;也可以回滾rollback; 然而在postgresql裡面預設是自動提交;執行完就馬上提交了,不能回滾,這樣容易導致誤操作的發生,有沒有什麼辦法避免這個風險呢?當然有,在psql中預設是打開自動提交的,我們可以關閉自動提交。
2. 操作驗證
[postgres@oracle2 ~]$ psql -U lottu -d xzfb psql (9.5.0) Type "help" for help. xzfb=> create table lottu01(id int); CREATE TABLE xzfb=> select * from lottu01; id ---- (0 rows) xzfb=> insert into lottu01 values (1001); INSERT 0 1 xzfb=> rollback xzfb-> ; WARNING: there is no transaction in progress ROLLBACK xzfb=> select * from lottu01; id ------ 1001 (1 row)從上面操作下;postgresql是自動提交的;如何關閉呢;執行 \set AUTOCOMMIT off
[postgres@oracle2 ~]$ psql -U lottu -d xzfb psql (9.5.0) Type "help" for help. xzfb=> \set AUTOCOMMIT off xzfb=> insert into lottu01 values (1002); INSERT 0 1 xzfb=> commit; --1002此處提交 COMMIT xzfb=> insert into lottu01 values (1003); INSERT 0 1 xzfb=> rollback; --1003回滾了 ROLLBACK xzfb=> select * from lottu01; id ------ 1001 1002 (2 rows)
3. 自動關閉提交
如果每次進入psql後都手工設置\set AUTOCOMMIT off比較麻煩,可以把這句設置到.psqlrc文件:
[postgres@oracle2 ~]$ cat .psqlrc \set AUTOCOMMIT off [postgres@oracle2 ~]$
4. 備註
但是這樣設置了;也存在不習慣的地方。 1. 操作錯誤之後;執行正確的dml語句會報錯“ERROR: current transaction is aborted, commands ignored until end of transaction block”;避免是執行commit;或者rollback[postgres@oracle2 ~]$ psql -U lottu -d xzfb psql (9.5.0) Type "help" for help. xzfb=> insert into lottu01 values ('1523'); INSERT 0 1 xzfb=> insert into lottu01 values ('a1523'); --插入字元串。 ERROR: invalid input syntax for integer: "a1523" LINE 1: insert into lottu01 values ('a1523'); ^ xzfb=> insert into lottu01 values (1523); --執行正確的dml語句會報錯 ERROR: current transaction is aborted, commands ignored until end of transaction block xzfb=> rollback; --避免下麵繼續報錯 ROLLBACK xzfb=> insert into lottu01 values (1523); INSERT 0 1
2. 執行ddl語句;也是需要執行commit,當然也可以rollback
xzfb=> create table t(id int); CREATE TABLE xzfb=> select * from t; id ---- (0 rows) xzfb=> \q [postgres@oracle2 ~]$ psql -U lottu -d xzfb psql (9.5.0) Type "help" for help. xzfb=> select * from t; ERROR: relation "t" does not exist LINE 1: select * from t; ^
3. 上面除了設置關閉自動提交;我們也可以通過begin end;去執行。略
作者 : li0924
時間 : 2016-01-22
本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.