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;
+