aboutsummaryrefslogtreecommitdiff
path: root/doc/src/sgml/ref/begin.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/src/sgml/ref/begin.sgml')
-rw-r--r--doc/src/sgml/ref/begin.sgml245
1 files changed, 133 insertions, 112 deletions
diff --git a/doc/src/sgml/ref/begin.sgml b/doc/src/sgml/ref/begin.sgml
index 62e5b88d0a7..495f2926958 100644
--- a/doc/src/sgml/ref/begin.sgml
+++ b/doc/src/sgml/ref/begin.sgml
@@ -1,180 +1,201 @@
-<REFENTRY ID="SQL-BEGINWORK">
- <REFMETA>
- <REFENTRYTITLE>
- BEGIN WORK
- </REFENTRYTITLE>
- <REFMISCINFO>SQL - Language Statements</REFMISCINFO>
- </REFMETA>
- <REFNAMEDIV>
- <REFNAME>
- BEGIN WORK
- </REFNAME>
- <REFPURPOSE>
+<refentry id="SQL-BEGINWORK">
+ <refmeta>
+ <refentrytitle id="SQL-BEGINWORK-TITLE">
+ BEGIN
+ </refentrytitle>
+ <refmiscinfo>SQL - Language Statements</refmiscinfo>
+ </refmeta>
+ <refnamediv>
+ <refname>
+ BEGIN
+ </refname>
+ <refpurpose>
Begins a transaction in chained mode
- </REFPURPOSE>
+ </refpurpose>
</refnamediv>
- <REFSYNOPSISDIV>
- <REFSYNOPSISDIVINFO>
- <DATE>1998-09-08</DATE>
- </REFSYNOPSISDIVINFO>
- <SYNOPSIS>
+ <refsynopsisdiv>
+ <refsynopsisdivinfo>
+ <date>1999-06-11</date>
+ </refsynopsisdivinfo>
+ <synopsis>
BEGIN [ WORK | TRANSACTION ]
- </SYNOPSIS>
+ </synopsis>
- <REFSECT2 ID="R2-SQL-BEGINWORK-1">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
+ <refsect2 id="R2-SQL-BEGINWORK-1">
+ <refsect2info>
+ <date>1999-06-11</date>
+ </refsect2info>
+ <title>
Inputs
- </TITLE>
- <PARA>
+ </title>
+ <para>
None
</para>
- </REFSECT2>
+ </refsect2>
- <REFSECT2 ID="R2-SQL-BEGINWORK-2">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
+ <refsect2 id="R2-SQL-BEGINWORK-2">
+ <refsect2info>
+ <date>1999-06-11</date>
+ </refsect2info>
+ <title>
Outputs
- </TITLE>
- <PARA>
+ </title>
- <VARIABLELIST>
- <VARLISTENTRY>
- <TERM>
- <returnvalue>BEGIN</returnvalue>
- </TERM>
- <LISTITEM>
- <PARA>
- This signifies that a new transaction has been started.
- </PARA>
- </LISTITEM>
- </VARLISTENTRY>
- <VARLISTENTRY>
- <TERM>
- <returnvalue>NOTICE: BeginTransactionBlock and not in default state</returnvalue>
- </TERM>
- <LISTITEM>
- <PARA>
+ <para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <returnvalue>BEGIN</returnvalue>
+ </term>
+ <listitem>
+ <para>
+ This signifies that a new transaction has been started.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <returnvalue>NOTICE: BeginTransactionBlock and not in default state</returnvalue>
+ </term>
+ <listitem>
+ <para>
This indicates that a transaction was already in progress.
The current transaction is not affected.
</para>
</listitem>
</varlistentry>
- </VARIABLELIST>
+ </variablelist>
</para>
- </REFSECT2>
- </REFSYNOPSISDIV>
+ </refsect2>
+ </refsynopsisdiv>
- <REFSECT1 ID="R1-SQL-BEGINWORK-1">
- <REFSECT1INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT1INFO>
- <TITLE>
+ <refsect1 id="R1-SQL-BEGINWORK-1">
+ <refsect1info>
+ <date>1999-06-11</date>
+ </refsect1info>
+ <title>
Description
- </TITLE>
+ </title>
+
<para>
By default, <productname>Postgres</productname> executes transactions
- in unchained mode (also known as autocommit feature in other DBMSes).
+ in <firstterm>unchained mode</firstterm>
+ (also known as <quote>autocommit</quote> in other database
+ systems).
In other words, each user statement is executed in its own transaction
- and commit is implicit (if execution was successfull).
+ and a commit is implicitly performed at the end of the statement
+ (if execution was successful, otherwise a rollback is done).
<command>BEGIN</command> initiates a user transaction in chained mode,
i.e. all user statements after <command>BEGIN</command> command will
- be executed in single transaction untill explicit COMMIT, ROLLBACK
+ be executed in a single transaction until an 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.
+ because transaction start/commit requires significant CPU and disk
+ activity. Execution of multiple statements inside a transaction
+ is also required for consistency when changing several
+ related tables.
</para>
+
<para>
- Default transaction isolation level in <productname>Postgres</productname>
- is READ COMMITTED one, when queries inside transaction see only changes
+ The default transaction isolation level in
+ <productname>Postgres</productname>
+ is READ COMMITTED, where queries inside the transaction see only changes
committed before query execution. So, you have to use
<command>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE</command>
- 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).
+ just after BEGIN if you need more rigorous transaction isolation.
+ In SERIALIZABLE mode queries will see only changes committed before
+ the entire
+ transaction began (actually, before execution of the first DML statement
+ in a serializable transaction).
</para>
+
<para>
If the transaction is committed, <productname>Postgres</productname>
will ensure either that all updates are done or else that none of
- them are done. Transactions have the standard ACID
+ them are done. Transactions have the standard <acronym>ACID</acronym>
(atomic, consistent, isolatable, and durable) property.
</para>
- <REFSECT2 ID="R2-SQL-BEGINWORK-3">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
+ <refsect2 id="R2-SQL-BEGINWORK-3">
+ <refsect2info>
+ <date>1999-06-11</date>
+ </refsect2info>
+ <title>
Notes
- </TITLE>
- <PARA>
+ </title>
+ <para>
The keyword TRANSACTION is just a cosmetic alternative to WORK.
Neither keyword need be specified.
- </PARA>
+ </para>
- <PARA>
+ <para>
Refer to the <command>LOCK</command> statement for further information
about locking tables inside a transaction.
- </PARA>
+ </para>
- <PARA>
- Use <command>COMMIT</command> or <command>ROLLBACK</command>
+ <para>
+ Use <xref linkend="SQL-COMMIT-TITLE" endterm="SQL-COMMIT-TITLE">
+ or
+ <xref linkend="SQL-ROLLBACK-TITLE" endterm="SQL-ROLLBACK-TITLE">
to terminate a transaction.
- </PARA>
- </REFSECT2>
+ </para>
+ </refsect2>
</refsect1>
-
- <REFSECT1 ID="R1-SQL-BEGINWORK-2">
- <TITLE>
+
+ <refsect1 id="R1-SQL-BEGINWORK-2">
+ <title>
Usage
- </TITLE>
- <PARA>To begin a user transaction:
+ </title>
- <ProgramListing>
+ <para>
+ To begin a user transaction:
+
+ <programlisting>
BEGIN WORK;
- </ProgramListing>
+ </programlisting>
</para>
- </REFSECT1>
+ </refsect1>
- <REFSECT1 ID="R1-SQL-BEGINWORK-3">
- <TITLE>
+ <refsect1 id="R1-SQL-BEGINWORK-3">
+ <title>
Compatibility
- </TITLE>
- <PARA>
+ </title>
+ <para>
<command>BEGIN</command>
is a <productname>Postgres</productname> language extension.
</para>
- <REFSECT2 ID="R2-SQL-BEGINWORK-4">
- <REFSECT2INFO>
- <DATE>1998-09-08</DATE>
- </REFSECT2INFO>
- <TITLE>
+ <refsect2 id="R2-SQL-BEGINWORK-4">
+ <refsect2info>
+ <date>1999-06-11</date>
+ </refsect2info>
+ <title>
SQL92
- </TITLE>
- <PARA>
+ </title>
+ <para>
There is no explicit BEGIN WORK command in <acronym>SQL92</acronym>;
transaction initiation is always implicit and it terminates either
with a COMMIT or with a ROLLBACK statement.
- </PARA>
- <PARA>
- <acronym>SQL92</acronym> also requires SERIALIZABLE to be default
+
+ <note>
+ <para>
+ Many relational database systems offer an autocommit feature as a
+ convenience.
+ </para>
+ </note>
+ </para>
+
+ <para>
+ <acronym>SQL92</acronym> also requires SERIALIZABLE to be the default
transaction isolation level.
- </PARA>
+ </para>
</refsect2>
</refsect1>
-</REFENTRY>
+</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
-sgml-omittag:t
+sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t