2015-01-14 81 views
0

結束交易使用PostgreSQL 9.1是否自動回滾在Postgres的

在此代碼:

BEGIN TRANSACTION 
    // Do something 
If error then 
    ROLLBACK //<--Does this automatically End Transaction 
Else 
    COMMIT //<--Automatically Ends Transaction 
End if 

是必要的ROLLBACK命令後END TRANSACTION命令?

+0

這是僞代碼嗎?請給我們一些背景。 (它似乎是PL/pgSQL,但不能在其中使用顯式事務並且在普通SQL中不支持/ then/else) – pozs

+0

您可以使用提交或回滾關閉事務。 END是PostgreSQL擴展,提供了與SQL標準中指定的COMMIT等效的功能。 –

回答

0

Rollback已結束您的交易,不需要其他命令。

這裏是一些例子:

test_general=# begin; 
BEGIN 
test_general=# lock TABLE t1 ; 
LOCK TABLE 
test_general=# select locktype, relname, mode from pg_locks l inner join pg_class c on c.oid = l.relation; 
locktype |   relname   |  mode   
----------+----------------------------+--------------------- 
relation | pg_namespace_oid_index  | AccessShareLock 
relation | pg_class_relname_nsp_index | AccessShareLock 
relation | t1       | AccessExclusiveLock 
test_general=# rollback; 
ROLLBACK 
test_general=# select locktype, relname, mode from pg_locks l inner join pg_class c on c.oid = l.relation; 
locktype |   relname   |  mode  
----------+----------------------------+----------------- 
relation | pg_class_relname_nsp_index | AccessShareLock 
relation | pg_class_oid_index   | AccessShareLock 
relation | pg_class     | AccessShareLock 
relation | pg_locks     | AccessShareLock 
(4 rows) 

鎖定裝置釋放該交易已經結束。