<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/start_transaction.sgml,v 1.3 2002/08/30 22:45:25 tgl Exp $
PostgreSQL documentation
-->

<refentry id="SQL-START-TRANSACTION">
 <docinfo>
  <date>2002-07-26</date>
 </docinfo>

 <refmeta>
  <refentrytitle id="SQL-START-TRANSACTION-TITLE">START TRANSACTION</refentrytitle>
  <refmiscinfo>SQL - Language Statements</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>START TRANSACTION</refname>
  <refpurpose>start a transaction block</refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <synopsis>
START TRANSACTION [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ]
  </synopsis>

  <refsect2 id="R2-SQL-START-TRANSACTION-1">
   <refsect2info>
    <date>1998-09-27</date>
   </refsect2info>
   <title>
    Inputs
   </title>

   <para>
    None.
   </para>
  </refsect2>

  <refsect2 id="R2-SQL-START-TRANSACTION-2">
   <refsect2info>
    <date>1998-09-27</date>
   </refsect2info>
   <title>
    Outputs
   </title>

   <para>

    <variablelist>
     <varlistentry>
      <term><computeroutput>
START TRANSACTION
       </computeroutput></term>
      <listitem>
       <para>
    Message returned if successful.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><computeroutput>
WARNING:  BEGIN: already a transaction in progress
       </computeroutput></term>
      <listitem>
       <para>
    If there is already a transaction in progress when the
    command is issued.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>
  </refsect2>
 </refsynopsisdiv>

 <refsect1>
  <title>Description</title>

  <para>
   This command begins a new transaction. If the isolation level is
   specified, the new transaction has that isolation level. In all other
   respects, the behavior of this command is identical to the
   <xref linkend="sql-begin" endterm="sql-begin-title"> command.
  </para>

 </refsect1>

 <refsect1>
  <title>Notes</title>

  <para>
   The isolation level of a transaction can also be set with the <xref
   linkend="sql-set-transaction" endterm="sql-set-transaction-title">
   command. If no isolation level is specified, the default isolation
   level is used.
  </para>
 </refsect1>

 <refsect1 id="R1-SQL-START-TRANSACTION-3">
  <title>Compatibility</title>

  <refsect2 id="R2-SQL-START-TRANSACTION-4">
   <title>SQL99</title>

   <para>
    <option>SERIALIZABLE</option> is the default isolation level in
    <acronym>SQL99</acronym>, but it is not the usual default in
    <productname>PostgreSQL</productname>: the factory default setting
    is READ COMMITTED.
    <productname>PostgreSQL</productname> 
    does not provide the isolation levels <option>READ UNCOMMITTED</option>
    and <option>REPEATABLE READ</option>. Because of lack of predicate
    locking, the <option>SERIALIZABLE</option> level is
    not truly serializable. See the <citetitle>User's Guide</citetitle>
    for details.
   </para>

   <para>
    In <acronym>SQL99</acronym> this statement can specify two other
    properties of the new transaction: whether the transaction is
    read-only and the size of the diagnostics area. Neither of these
    concepts are currently supported in
    <productname>PostgreSQL</productname>.
   </para>
  </refsect2>
 </refsect1>
</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode:sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:("/usr/lib/sgml/catalog")
sgml-local-ecat-files:nil
End:
-->
