BEGIN WORK
- Begins a transaction
+ Begins a transaction in chained mode
Description
- BEGIN initiates a user transaction
- guarantee is serializable with respect to all concurrently
- executing transactions.
Postgres uses two-phase
- locking
- to perform this task. If the transaction is committed,
-
Postgres will ensure either that all updates are
- done or else
- that none of
+ By default,
Postgres executes transactions
+ in unchained mode (also known as autocommit feature in other DBMSes).
+ In other words, each user statement is executed in its own transaction
+ and commit is implicit (if execution was successfull).
+ BEGIN initiates a user transaction in chained mode,
+ i.e. all user statements after BEGIN command will
+ be executed in single transaction untill explicit COMMIT, ROLLBACK
+ or execution abort. Statements in chained mode are executed much faster,
+ because of transaction start/commit requires significant CPU and disk
+ activity. This mode is also required for consistency when changing
+ one of related tables.
+
+ Default transaction isolation level in
Postgres
+ is READ COMMITTED one, when queries inside transaction see only changes
+ committed before query execution. So, you have to use
+ SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
+ command just after BEGIN if you need in better transaction isolation.
+ In SERIALIZABLE mode queries will see only changes committed before entire
+ transaction began (actually, before execution of first DML statement
+ in serializable transaction).
+
+ If the transaction is committed,
Postgres
+ will ensure either that all updates are done or else that none of
them are done. Transactions have the standard ACID
(atomic, consistent, isolatable, and durable) property.
Refer to the LOCK statement for further information
- about locking tables inside a transaction.
+ about locking tables inside a transaction.
Use COMMIT or ROLLBACK
- to terminate a transaction.
+ to terminate a transaction.
BEGIN
- is a
Postgres language extension.
+
is a
Postgres language extension.
There is no explicit BEGIN WORK command in
SQL92;
- transaction initiation
- is always implicit and it terminates either with a COMMIT or with
- a ROLLBACK statement.
+ transaction initiation is always implicit and it terminates either
+ with a COMMIT or with a ROLLBACK statement.
+
+
SQL92 also requires SERIALIZABLE to be default
+ transaction isolation level.