]> granicus.if.org Git - postgresql/commitdiff
This patch improves the documentation for SERIAL columns a little bit.
authorBruce Momjian <bruce@momjian.us>
Fri, 6 Dec 2002 05:17:42 +0000 (05:17 +0000)
committerBruce Momjian <bruce@momjian.us>
Fri, 6 Dec 2002 05:17:42 +0000 (05:17 +0000)
Neil Conway

doc/src/sgml/datatype.sgml

index cac65623dc5cc28c128f8cabe28e06006c931eb2..a837b31550a7f2fd3ce25c9601db38b5de8af093 100644 (file)
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.109 2002/11/21 23:31:20 tgl Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/datatype.sgml,v 1.110 2002/12/06 05:17:42 momjian Exp $
 -->
 
  <chapter id="datatype">
@@ -654,10 +654,11 @@ NUMERIC
     </indexterm>
 
     <para>
-     The <type>serial</type> data types are not truly types, but are a
-     notational convenience for setting up unique identifier columns
-     in tables.
-     In the current implementation, specifying
+     The <type>serial</type> data type is not a true type, but merely
+     a notational convenience for setting up identifier columns
+     (similar to the <literal>AUTO_INCREMENT</literal> property
+     supported by some other databases). In the current
+     implementation, specifying
 
 <programlisting>
 CREATE TABLE <replaceable class="parameter">tablename</replaceable> (
@@ -683,33 +684,50 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (
      not automatic.
     </para>
 
+    <para>
+     To use a <type>serial</type> column to insert the next value of
+     the sequence into the table, specify that the <type>serial</type>
+     column should be assigned the default value. This can be done
+     either be excluding from the column from the list of columns in
+     the <command>INSERT</command> statement, or through the use of
+     the <literal>DEFAULT</literal> keyword.
+    </para>
+
     <para>
      The type names <type>serial</type> and <type>serial4</type> are
      equivalent: both create <type>integer</type> columns.  The type
      names <type>bigserial</type> and <type>serial8</type> work just
      the same way, except that they create a <type>bigint</type>
      column.  <type>bigserial</type> should be used if you anticipate
-     the use of more than 2<superscript>31</> identifiers over the lifetime of the table.
+     the use of more than 2<superscript>31</> identifiers over the
+     lifetime of the table.
     </para>
 
     <para>
-     The sequence created by a <type>serial</type> type is automatically
-     dropped when
-     the owning column is dropped, and cannot be dropped otherwise.
-     (This was not true in <productname>PostgreSQL</productname> releases
-     before 7.3.  Note that this automatic drop linkage will not occur for a
-     sequence created by reloading a dump from a pre-7.3 database; the dump
-     file does not contain the information needed to establish the dependency
-     link.)
+     The sequence created by a <type>serial</type> type is
+     automatically dropped when the owning column is dropped, and
+     cannot be dropped otherwise.  (This was not true in
+     <productname>PostgreSQL</productname> releases before 7.3.  Note
+     that this automatic drop linkage will not occur for a sequence
+     created by reloading a dump from a pre-7.3 database; the dump
+     file does not contain the information needed to establish the
+     dependency link.) Furthermore, this dependency between sequence
+     and column is made only for the <type>serial</> column itself; if
+     any other columns reference the sequence (perhaps by manually
+     calling the <function>nextval()</>) function), they may be broken
+     if the sequence is removed. Using <type>serial</> columns in
+     fashion is considered bad form.
     </para>
 
-    <note><para>
-     Prior to <productname>PostgreSQL</productname> 7.3, <type>serial</type>
-     implied <literal>UNIQUE</literal>.  This is no longer automatic.  If
-     you wish a serial column to be <literal>UNIQUE</literal> or a 
-     <literal>PRIMARY KEY</literal> it must now be specified, same as with
-     any other data type.
-    </para></note>
+    <note>
+     <para>
+      Prior to <productname>PostgreSQL</> 7.3, <type>serial</type>
+      implied <literal>UNIQUE</literal>.  This is no longer automatic.
+      If you wish a serial column to be <literal>UNIQUE</literal> or a
+      <literal>PRIMARY KEY</literal> it must now be specified, just as
+      with any other data type.
+     </para>
+    </note>
    </sect2>
   </sect1>