This appendix is excerpted from the PostgreSQL 9.1 documentation chapter titled “Transactions”.
Transactions are a fundamental concept of all database 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, then none of the steps affect the database at all.
Another important property of transactional databases is closely related to the notion of atomic updates: when multiple transactions are running concurrently, each one should not be able to see the incomplete changes made by others.
In PostgreSQL, a transaction is set up by surrounding the
SQL commands of the transaction with BEGIN
and
COMMIT
commands. So a banking transaction would
actually look like:
BEGIN;
UPDATE accounts SET balance = balance - 100.00
WHERE name = 'Alice';
-- etc etc
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 COMMIT
, and all our updates so far will be
canceled.
PostgreSQL actually treats every SQL statement as being
executed within a transaction. If you do not issue a
BEGIN
command, then each individual statement has an
implicit BEGIN
and (if successful)
COMMIT
wrapped around it.