diff --git a/doc/src/sgml/advanced.sgml b/doc/src/sgml/advanced.sgml index e15a3323dfbf..05539745e504 100644 --- a/doc/src/sgml/advanced.sgml +++ b/doc/src/sgml/advanced.sgml @@ -149,7 +149,8 @@ DETAIL: Key (city)=(Berkeley) is not present in table "cities". systems. The essential point of a transaction is that it bundles multiple steps into a single, all-or-nothing operation. The intermediate states between the steps are not visible to other concurrent transactions, - and if some failure occurs that prevents the transaction from completing, + and if an error + occurs that prevents the transaction from completing, then none of the steps affect the database at all. @@ -218,7 +219,8 @@ UPDATE branches SET balance = balance + 100.00 In PostgreSQL, a transaction is set up by surrounding the SQL commands of the transaction with - BEGIN and COMMIT commands. So our banking + and + commands. So our banking transaction would actually look like: @@ -233,7 +235,7 @@ COMMIT; If, partway through the transaction, we decide we do not want to commit (perhaps we just noticed that Alice's balance went negative), - we can issue the command ROLLBACK instead of + we can issue the command instead of COMMIT, and all our updates so far will be canceled. @@ -256,6 +258,16 @@ COMMIT; + + When an error occurs within a transaction block the transaction is not ended + but instead goes into an aborted state. While in this state all commands except + and are ignored and, + importantly, both those commands behave identically - they roll-back and close + the current transaction, returning the session to a state where new commands can + be issued. They will also automatically begin a new transaction if executed + with a AND CHAIN parameter. + + It's possible to control the statements in a transaction in a more granular fashion through the use of savepoints. Savepoints diff --git a/doc/src/sgml/ref/commit.sgml b/doc/src/sgml/ref/commit.sgml index 7e2dcac5a33a..876a971db602 100644 --- a/doc/src/sgml/ref/commit.sgml +++ b/doc/src/sgml/ref/commit.sgml @@ -33,6 +33,19 @@ COMMIT [ WORK | TRANSACTION ] [ AND [ NO ] CHAIN ] changes made by the transaction become visible to others and are guaranteed to be durable if a crash occurs. + + If the transaction is in an aborted state then no changes will be made + and the effect of the COMMIT will be identical to that + of ROLLBACK, including the command tag output. + + + In either situation, if the AND CHAIN parameter is + specified a new, identically configured, transaction is started. + + + For more information regarding transactions see + . + @@ -67,6 +80,25 @@ COMMIT [ WORK | TRANSACTION ] [ AND [ NO ] CHAIN ] + + Outputs + + + On successful completion on a non-aborted transaction, a COMMIT + command returns a command tag of the form + +COMMIT + + + + However, on an aborted transaction, a COMMIT + command returns a command tag of the form + +ROLLBACK + + + + Notes @@ -107,6 +139,7 @@ COMMIT; +