Commit da1738a1 authored by Bruce Momjian's avatar Bruce Momjian

This patch improves the documentation for SERIAL columns a little bit.

Neil Conway
parent 982b26c0
<!-- <!--
$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"> <chapter id="datatype">
...@@ -654,10 +654,11 @@ NUMERIC ...@@ -654,10 +654,11 @@ NUMERIC
</indexterm> </indexterm>
<para> <para>
The <type>serial</type> data types are not truly types, but are a The <type>serial</type> data type is not a true type, but merely
notational convenience for setting up unique identifier columns a notational convenience for setting up identifier columns
in tables. (similar to the <literal>AUTO_INCREMENT</literal> property
In the current implementation, specifying supported by some other databases). In the current
implementation, specifying
<programlisting> <programlisting>
CREATE TABLE <replaceable class="parameter">tablename</replaceable> ( CREATE TABLE <replaceable class="parameter">tablename</replaceable> (
...@@ -683,33 +684,50 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> ( ...@@ -683,33 +684,50 @@ CREATE TABLE <replaceable class="parameter">tablename</replaceable> (
not automatic. not automatic.
</para> </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> <para>
The type names <type>serial</type> and <type>serial4</type> are The type names <type>serial</type> and <type>serial4</type> are
equivalent: both create <type>integer</type> columns. The type equivalent: both create <type>integer</type> columns. The type
names <type>bigserial</type> and <type>serial8</type> work just names <type>bigserial</type> and <type>serial8</type> work just
the same way, except that they create a <type>bigint</type> the same way, except that they create a <type>bigint</type>
column. <type>bigserial</type> should be used if you anticipate 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>
<para> <para>
The sequence created by a <type>serial</type> type is automatically The sequence created by a <type>serial</type> type is
dropped when automatically dropped when the owning column is dropped, and
the owning column is dropped, and cannot be dropped otherwise. cannot be dropped otherwise. (This was not true in
(This was not true in <productname>PostgreSQL</productname> releases <productname>PostgreSQL</productname> releases before 7.3. Note
before 7.3. Note that this automatic drop linkage will not occur for a that this automatic drop linkage will not occur for a sequence
sequence created by reloading a dump from a pre-7.3 database; the dump created by reloading a dump from a pre-7.3 database; the dump
file does not contain the information needed to establish the dependency file does not contain the information needed to establish the
link.) 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> </para>
<note><para> <note>
Prior to <productname>PostgreSQL</productname> 7.3, <type>serial</type> <para>
implied <literal>UNIQUE</literal>. This is no longer automatic. If Prior to <productname>PostgreSQL</> 7.3, <type>serial</type>
you wish a serial column to be <literal>UNIQUE</literal> or a implied <literal>UNIQUE</literal>. This is no longer automatic.
<literal>PRIMARY KEY</literal> it must now be specified, same as with If you wish a serial column to be <literal>UNIQUE</literal> or a
any other data type. <literal>PRIMARY KEY</literal> it must now be specified, just as
</para></note> with any other data type.
</para>
</note>
</sect2> </sect2>
</sect1> </sect1>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment