<REFENTRY ID="SQL-CREATESEQUENCE">
 <REFMETA>
  <REFENTRYTITLE>
   CREATE SEQUENCE
  </REFENTRYTITLE>
  <REFMISCINFO>SQL - Language Statements</REFMISCINFO>
 </REFMETA>
 <REFNAMEDIV>
  <REFNAME>
   CREATE SEQUENCE
  </REFNAME>
  <REFPURPOSE>
   Creates a new sequence number generator
  </REFPURPOSE>
  
 <REFSYNOPSISDIV>
  <REFSYNOPSISDIVINFO>
   <DATE>1998-04-15</DATE>
  </REFSYNOPSISDIVINFO>
  <SYNOPSIS>
CREATE SEQUENCE <replaceable class="parameter">seqname</replaceable>
    [ INCREMENT <replaceable class="parameter">increment</replaceable> ]
    [ MINVALUE  <replaceable class="parameter">minvalue</replaceable> ]
    [ MAXVALUE  <replaceable class="parameter">maxvalue</replaceable> ]
    [ START     <replaceable class="parameter">start</replaceable> ]
    [ CACHE     <replaceable class="parameter">cache</replaceable> ]
    [ CYCLE ]
  </SYNOPSIS>
  
  <REFSECT2 ID="R2-SQL-CREATESEQUENCE-1">
   <REFSECT2INFO>
    <DATE>1998-09-11</DATE>
   </REFSECT2INFO>
   <TITLE>
    Inputs
   </TITLE>
   <PARA>
   </PARA>
       <VARIABLELIST>
	<VARLISTENTRY>
	 <TERM>
	 <replaceable class="parameter">seqname</replaceable>
	 </TERM>
	 <LISTITEM>
	  <PARA>
          The name of a sequence to be created.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
	 <replaceable class="parameter">increment</replaceable>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   The <option>INCREMENT <replaceable class="parameter">increment</replaceable></option> clause is optional. A positive value will make an
	    ascending sequence, a negative one a descending sequence.
 The default value is one (1).
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
	 <replaceable class="parameter">minvalue</replaceable>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   The optional clause <option>MINVALUE
	   <replaceable class="parameter">minvalue</replaceable></option>
	   determines the minimum value
	   a sequence can be. The defaults are 1 and -2147483647 for
	   ascending and descending sequences, respectively.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
	 <replaceable class="parameter">maxvalue</replaceable>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   Use the optional clause <option>MAXVALUE
	   <replaceable class="parameter">maxvalue</replaceable></option> to
	   determine the maximum
	   value for the sequence. The defaults are 2147483647 and -1 for
	   ascending and descending sequences, respectively.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
	 <replaceable class="parameter">start</replaceable>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   The optional <option>START
	    <replaceable class="parameter">start</replaceable>
	    clause</option> enables the sequence to begin anywhere.
	   The default starting value is
	   <replaceable class="parameter">minvalue</replaceable>
	   for ascending sequences and
	   <replaceable class="parameter">maxvalue</replaceable>
	   for descending ones.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
	 <replaceable class="parameter">cache</replaceable>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   The <option>CACHE <replaceable class="parameter">cache</replaceable></option> option
	   enables sequence numbers to be preallocated
	   and stored in memory for faster access. The  minimum
	   value is 1 (no cache) and this is also the default.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
	 CYCLE
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   The optional CYCLE keyword may be used to enable the sequence
	   to continue when the
	   <replaceable class="parameter">maxvalue</replaceable> or
	   <replaceable class="parameter">minvalue</replaceable> has been
	   reached by
	   an ascending or descending sequence respectively. If the limit is
	   reached, the next number generated will be whatever the
	   <replaceable class="parameter">minvalue</replaceable> or
	   <replaceable class="parameter">maxvalue</replaceable> is,
	   as appropriate.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
       </variablelist>
  </REFSECT2>
  
  <REFSECT2 ID="R2-SQL-CREATESEQUENCE-2">
   <REFSECT2INFO>
    <DATE>1998-09-11</DATE>
   </REFSECT2INFO>
   <TITLE>
    Outputs
   </TITLE>
   <PARA>
   </PARA>
   <VARIABLELIST>
    <VARLISTENTRY>
     <TERM>
<replaceable>status</replaceable>
     </TERM>
     <LISTITEM>
      <PARA>
       <VARIABLELIST>
	<VARLISTENTRY>
	 <TERM>
	  <ReturnValue>CREATE</ReturnValue>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   Message returned if the command is successful.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
<ReturnValue>ERROR:  amcreate: '<replaceable class="parameter">seqname</replaceable>' relation already exists</ReturnValue>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   If the sequence specified already exists.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
<ReturnValue>ERROR:  DefineSequence: START value (<replaceable class="parameter">start</replaceable>) can't be > MAXVALUE (<replaceable class="parameter">maxvalue</replaceable>)</ReturnValue>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   If the specified starting value is out of range.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
<ReturnValue>ERROR:  DefineSequence: START value (<replaceable class="parameter">start</replaceable>) can't be < MINVALUE (<replaceable class="parameter">minvalue</replaceable>)</ReturnValue>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   If the specified starting value is out of range.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
	<VARLISTENTRY>
	 <TERM>
<ReturnValue>ERROR:  DefineSequence: MINVALUE (<replaceable class="parameter">minvalue</replaceable>) can't be >= MAXVALUE (<replaceable class="parameter">maxvalue</replaceable>)</ReturnValue>
	 </TERM>
	 <LISTITEM>
	  <PARA>
	   If the minimum and maximum values are inconsistant.
	  </PARA>
	 </LISTITEM>
	</VARLISTENTRY>
       </variablelist>
     </LISTITEM>
    </VARLISTENTRY>
   </VARIABLELIST>
  </REFSECT2>
 </REFSYNOPSISDIV>
 
 <REFSECT1 ID="R1-SQL-CREATESEQUENCE-1">
  <REFSECT1INFO>
   <DATE>1998-09-11</DATE>
  </REFSECT1INFO>
  <TITLE>
   Description
  </TITLE>
  <PARA>
   CREATE SEQUENCE will enter a new sequence number generator
   into the current data base. This involves creating and initialising a
   new single block
   table with the name <replaceable class="parameter">seqname</replaceable>.
   The generator will be "owned" by the user issuing the command.
  </PARA>
  <para>
   After the sequence is created, you may use the function
<function>nextval(<replaceable class="parameter">seqname</replaceable>)</function>
to get a new number from the sequence.
The function
<function>currval('<replaceable class="parameter">seqname</replaceable>')</function>
 may be used
   to determine the number returned by the last call to
<function>nextval(<replaceable class="parameter">seqname</replaceable>)</function>
 for the specified sequence in the current session.
  </para>
  
  <para>
   Use a query like
   <programlisting>
SELECT * FROM sequence_name;
   </programlisting>
   to get the parameters of a sequence.
  </para>
  <para>
   Low-level locking is used to enable multiple simultaneous
   calls to a generator.
  </para>
  
  <REFSECT2 ID="R2-SQL-CREATESEQUENCE-3">
   <REFSECT2INFO>
    <DATE>1998-09-11</DATE>
   </REFSECT2INFO>
   <TITLE>
    Notes
   </TITLE>
   <PARA>
    Refer to the DROP SEQUENCE statement to remove a sequence.
   </PARA>
   <para>
    Each backend uses its own cache to store allocated numbers.
    Numbers that are cached but not used in the current session will be
    lost, resulting in "holes" in the sequence.
   </para>
  </REFSECT2>
 </refsect1>
 
 <REFSECT1 ID="R1-SQL-CREATESEQUENCE-2">
  <TITLE>
   Usage
  </TITLE>
  <PARA>
   Create an ascending sequence called <literal>serial</literal>, starting at 101:
  </PARA>
  <ProgramListing>
CREATE SEQUENCE serial START 101;
  </ProgramListing>
  <para>
   Select the next number from this sequence
   <programlisting>
SELECT NEXTVAL ('serial');
    
nextval
-------
    114
   </programlisting>
  </para>
  <para>
   Use this sequence in an INSERT:
   <programlisting>
INSERT INTO distributors VALUES (NEXTVAL('serial'),'nothing');
   </programlisting>
  </para>
 </REFSECT1>
 
 <REFSECT1 ID="R1-SQL-CREATESEQUENCE-3">
  <TITLE>
   Compatibility
  </TITLE>
  <PARA>
   <command>CREATE SEQUENCE</command> is a <productname>Postgres</productname>
 language extension.
  </PARA>
  
  <REFSECT2 ID="R2-SQL-CREATESEQUENCE-4">
   <REFSECT2INFO>
    <DATE>1998-09-11</DATE>
   </REFSECT2INFO>
   <TITLE>
    SQL92
   </TITLE>
   <PARA>
    There is no <command>CREATE SEQUENCE</command> statement
 in <acronym>SQL92</acronym>.
   </PARA>
  </refsect2>
 </refsect1>
</REFENTRY>


<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
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:
-->
