set_transaction.sgml 5.43 KB
Newer Older
1
<!-- $Header: /cvsroot/pgsql/doc/src/sgml/ref/set_transaction.sgml,v 1.18 2003/11/06 22:08:14 petere Exp $ -->
2 3
<refentry id="SQL-SET-TRANSACTION">
 <refmeta>
4
  <refentrytitle id="SQL-SET-TRANSACTION-TITLE">SET TRANSACTION</refentrytitle>
5 6
  <refmiscinfo>SQL - Language Statements</refmiscinfo>
 </refmeta>
7

8 9
 <refnamediv>
  <refname>SET TRANSACTION</refname>
10
  <refpurpose>set the characteristics of the current transaction</refpurpose>
11
 </refnamediv>
12

Peter Eisentraut's avatar
Peter Eisentraut committed
13 14 15 16
 <indexterm zone="sql-set-transaction">
  <primary>SET TRANSACTION</primary>
 </indexterm>

17
 <refsynopsisdiv>
18
<synopsis>
19
SET TRANSACTION
20 21 22
    [ ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } ]
    [ READ WRITE | READ ONLY ]

23
SET SESSION CHARACTERISTICS AS TRANSACTION
24 25
    [ ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE } ]
    [ READ WRITE | READ ONLY ]
26
</synopsis>
27 28 29 30 31 32
 </refsynopsisdiv>

 <refsect1>
  <title>Description</title>

  <para>
33
   The <command>SET TRANSACTION</command> command sets the transaction
34 35
   characteristics of the current transaction. It has no effect on any
   subsequent transactions.  <command>SET SESSION
36 37 38 39 40 41 42 43 44 45
   CHARACTERISTICS</command> sets the default transaction
   characteristics for each transaction of a session.  <command>SET
   TRANSACTION</command> can override it for an individual
   transaction.
  </para>

  <para>
   The available transaction characteristics are the transaction
   isolation level and the transaction access mode (read/write or
   read-only).
46 47 48 49 50 51 52 53
  </para>

  <para>
   The isolation level of a transaction determines what data the
   transaction can see when other transactions are running concurrently.

   <variablelist>
    <varlistentry>
Peter Eisentraut's avatar
Peter Eisentraut committed
54
     <term><literal>READ COMMITTED</literal></term>
55 56 57 58 59 60 61 62 63
     <listitem>
      <para>
       A statement can only see rows committed before it began. This
       is the default.
      </para>
     </listitem>
    </varlistentry>

    <varlistentry>
64
     <term><literal>SERIALIZABLE</literal></term>
65 66 67
     <listitem>
      <para>
       The current transaction can only see rows committed before
68
       first query or data-modification statement was executed in this transaction.
69 70 71 72 73 74 75 76 77 78 79 80
      </para>
      <tip>
       <para>
        Intuitively, serializable means that two concurrent
        transactions will leave the database in the same state as if
        the two has been executed strictly after one another in either
        order.
       </para>
      </tip>
     </listitem>
    </varlistentry>
   </variablelist>
81

82 83 84 85 86
   The level <literal>READ UNCOMMITTED</literal> is mapped to
   <literal>READ COMMITTED</literal>, the level <literal>REPEATABLE
   READ</literal> is mapped to <literal>SERIALIZABLE</literal>, The
   transaction isolation level cannot be set after the first query or
   data-modification statement (<command>SELECT</command>,
87 88
   <command>INSERT</command>, <command>DELETE</command>,
   <command>UPDATE</command>, <command>FETCH</command>,
89 90 91
   <command>COPY</command>) of a transaction has been executed.  See
   <xref linkend="mvcc"> for more information about transaction
   isolation and concurrency control.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
  </para>

  <para>
   The transaction access mode determines whether the transaction is
   read/write or read-only.  Read/write is the default.  When a
   transaction is read-only, the following SQL commands are
   disallowed: <literal>INSERT</literal>, <literal>UPDATE</literal>,
   <literal>DELETE</literal>, and <literal>COPY TO</literal> if the
   table they would write to is not a temporary table; all
   <literal>CREATE</literal>, <literal>ALTER</literal>, and
   <literal>DROP</literal> commands; <literal>COMMENT</literal>,
   <literal>GRANT</literal>, <literal>REVOKE</literal>,
   <literal>TRUNCATE</literal>; and <literal>EXPLAIN ANALYZE</literal>
   and <literal>EXECUTE</literal> if the command they would execute is
   among those listed.  This is a high-level notion of read-only that
   does not prevent writes to disk.
108 109 110
  </para>
 </refsect1>

111 112 113 114 115
 <refsect1>
  <title>Notes</title>

  <para>
   The session default transaction isolation level can also be set
116 117 118 119
   with the command
<programlisting>
SET default_transaction_isolation = '<replaceable>value</replaceable>'
</programlisting>
120
   and in the configuration file.  Consult <xref linkend="runtime-config"> for more
121
   information.
122 123 124
  </para>
 </refsect1>

125
 <refsect1 id="R1-SQL-SET-TRANSACTION-3">
126 127
  <title>Compatibility</title>

128
  <para>
129
   Both commands are defined in the <acronym>SQL</acronym> standard.
130
   <literal>SERIALIZABLE</literal> is the default transaction
131 132 133 134 135 136
   isolation level in the standard; in
   <productname>PostgreSQL</productname> the default is ordinarily
   <literal>READ COMMITTED</literal>, but you can change it as
   described above.  Because of multiversion concurrency control, the
   <literal>SERIALIZABLE</literal> level is not truly
   serializable. See <xref linkend="mvcc"> for details.
137 138 139 140 141 142 143
  </para>

  <para>
   In the SQL standard, there is one other transaction characteristic
   that can be set with these commands: the size of the diagnostics
   area.  This concept is only for use in embedded SQL.
  </para>
144 145 146
 </refsect1>
</refentry>

147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
<!-- 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:
-->