1999-07-22 17:09:15 +02:00
|
|
|
<!--
|
2000-10-05 21:48:34 +02:00
|
|
|
$Header: /cvsroot/pgsql/doc/src/sgml/ref/create_sequence.sgml,v 1.14 2000/10/05 19:48:17 momjian Exp $
|
1999-07-22 17:09:15 +02:00
|
|
|
Postgres documentation
|
|
|
|
-->
|
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refentry id="SQL-CREATESEQUENCE">
|
|
|
|
<refmeta>
|
1999-07-22 17:09:15 +02:00
|
|
|
<refentrytitle id="sql-createsequence-title">
|
1998-07-14 05:47:34 +02:00
|
|
|
CREATE SEQUENCE
|
1999-07-06 19:16:42 +02:00
|
|
|
</refentrytitle>
|
|
|
|
<refmiscinfo>SQL - Language Statements</refmiscinfo>
|
|
|
|
</refmeta>
|
|
|
|
<refnamediv>
|
|
|
|
<refname>
|
1998-07-14 05:47:34 +02:00
|
|
|
CREATE SEQUENCE
|
1999-07-06 19:16:42 +02:00
|
|
|
</refname>
|
|
|
|
<refpurpose>
|
1998-08-15 09:00:37 +02:00
|
|
|
Creates a new sequence number generator
|
1999-07-06 19:16:42 +02:00
|
|
|
</refpurpose>
|
1998-12-29 03:24:47 +01:00
|
|
|
</refnamediv>
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsynopsisdiv>
|
|
|
|
<refsynopsisdivinfo>
|
1999-07-22 17:09:15 +02:00
|
|
|
<date>1999-07-20</date>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsynopsisdivinfo>
|
|
|
|
<synopsis>
|
1999-07-22 17:09:15 +02:00
|
|
|
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 ]
|
1999-07-06 19:16:42 +02:00
|
|
|
</synopsis>
|
1998-07-14 05:47:34 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<refsect2 id="R2-SQL-CREATESEQUENCE-1">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-09-11</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-07-14 05:47:34 +02:00
|
|
|
Inputs
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
|
|
|
|
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">seqname</replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The name of a sequence to be created.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<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>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<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 generate. The defaults are 1 and -2147483647 for
|
|
|
|
ascending and descending sequences, respectively.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<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>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<varlistentry>
|
|
|
|
<term><replaceable class="parameter">start</replaceable></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
The optional <option>START
|
1998-09-16 16:43:12 +02:00
|
|
|
<replaceable class="parameter">start</replaceable>
|
1999-07-06 19:16:42 +02:00
|
|
|
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>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<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
|
2000-10-05 21:48:34 +02:00
|
|
|
value is 1 (only one value can be generated at a time, i.e., no cache)
|
1999-07-06 19:16:42 +02:00
|
|
|
and this is also the default.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<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>
|
|
|
|
</para>
|
|
|
|
</refsect2>
|
|
|
|
|
|
|
|
<refsect2 id="R2-SQL-CREATESEQUENCE-2">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-09-11</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-07-14 05:47:34 +02:00
|
|
|
Outputs
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
1998-10-30 20:34:40 +01:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<variablelist>
|
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
|
|
|
CREATE
|
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
Message returned if the command is successful.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
|
|
|
ERROR: Relation '<replaceable class="parameter">seqname</replaceable>' already exists
|
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
If the sequence specified already exists.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
|
|
|
ERROR: DefineSequence: MINVALUE (<replaceable class="parameter">start</replaceable>) can't be >= MAXVALUE (<replaceable class="parameter">max</replaceable>)
|
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
If the specified starting value is out of range.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
|
|
|
ERROR: DefineSequence: START value (<replaceable class="parameter">start</replaceable>) can't be < MINVALUE (<replaceable class="parameter">min</replaceable>)
|
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
If the specified starting value is out of range.
|
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
|
|
|
<varlistentry>
|
|
|
|
<term><computeroutput>
|
|
|
|
ERROR: DefineSequence: MINVALUE (<replaceable class="parameter">min</replaceable>) can't be >= MAXVALUE (<replaceable class="parameter">max</replaceable>)
|
|
|
|
</computeroutput></term>
|
|
|
|
<listitem>
|
|
|
|
<para>
|
|
|
|
If the minimum and maximum values are inconsistant.
|
1998-12-29 03:24:47 +01:00
|
|
|
</para>
|
|
|
|
</listitem>
|
|
|
|
</varlistentry>
|
1999-07-06 19:16:42 +02:00
|
|
|
</variablelist>
|
1998-12-29 03:24:47 +01:00
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsect2>
|
|
|
|
</refsynopsisdiv>
|
|
|
|
|
|
|
|
<refsect1 id="R1-SQL-CREATESEQUENCE-1">
|
|
|
|
<refsect1info>
|
|
|
|
<date>1998-09-11</date>
|
|
|
|
</refsect1info>
|
|
|
|
<title>
|
1998-07-14 05:47:34 +02:00
|
|
|
Description
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
|
|
|
<command>CREATE SEQUENCE</command> will enter a new sequence number generator
|
2000-05-08 18:19:56 +02:00
|
|
|
into the current data base. This involves creating and initializing a
|
1998-10-15 07:47:04 +02:00
|
|
|
new single-row
|
1998-07-14 05:47:34 +02:00
|
|
|
table with the name <replaceable class="parameter">seqname</replaceable>.
|
|
|
|
The generator will be "owned" by the user issuing the command.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1998-07-14 05:47:34 +02:00
|
|
|
<para>
|
1998-10-15 07:47:04 +02:00
|
|
|
After a sequence is created, you may use the function
|
1999-07-06 19:16:42 +02:00
|
|
|
<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.
|
|
|
|
The function
|
|
|
|
<function>setval('<replaceable class="parameter">seqname</replaceable>',
|
|
|
|
<replaceable class="parameter">newvalue</replaceable>)</function>
|
|
|
|
may be used to set the current value of the specified sequence.
|
|
|
|
The next call to
|
|
|
|
<function>nextval(<replaceable class="parameter">seqname</replaceable>)</function>
|
|
|
|
will return the given value plus the sequence increment.
|
1998-07-14 05:47:34 +02:00
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
1998-07-14 05:47:34 +02:00
|
|
|
<para>
|
|
|
|
Use a query like
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1998-07-14 05:47:34 +02:00
|
|
|
<programlisting>
|
2000-05-08 18:19:56 +02:00
|
|
|
SELECT * FROM <replaceable>seqname</replaceable>;
|
1998-07-14 05:47:34 +02:00
|
|
|
</programlisting>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1998-07-14 05:47:34 +02:00
|
|
|
to get the parameters of a sequence.
|
1999-07-22 17:09:15 +02:00
|
|
|
|
2000-05-08 18:19:56 +02:00
|
|
|
As an alternative to fetching the
|
|
|
|
parameters from the original definition as above, you can use
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1998-10-15 07:47:04 +02:00
|
|
|
<programlisting>
|
2000-05-08 18:19:56 +02:00
|
|
|
SELECT last_value FROM <replaceable>seqname</replaceable>;
|
1998-10-15 07:47:04 +02:00
|
|
|
</programlisting>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1998-10-15 07:47:04 +02:00
|
|
|
to obtain the last value allocated by any backend.
|
1998-07-14 05:47:34 +02:00
|
|
|
</para>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1998-07-14 05:47:34 +02:00
|
|
|
<para>
|
|
|
|
Low-level locking is used to enable multiple simultaneous
|
|
|
|
calls to a generator.
|
|
|
|
</para>
|
1998-10-15 07:47:04 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<caution>
|
1998-12-29 03:24:47 +01:00
|
|
|
<para>
|
|
|
|
Unexpected results may be obtained if a cache setting greater than one
|
|
|
|
is used for a sequence object that will be used concurrently by multiple
|
2000-05-08 18:19:56 +02:00
|
|
|
backends. Each backend will allocate and cache successive sequence values
|
1998-12-29 03:24:47 +01:00
|
|
|
during one access to the sequence object and increase the sequence
|
|
|
|
object's last_value accordingly. Then, the next cache-1 uses of nextval
|
|
|
|
within that backend simply return the preallocated values without touching
|
|
|
|
the shared object. So, numbers allocated but not used in the current session
|
|
|
|
will be lost. Furthermore, although multiple backends are guaranteed to
|
|
|
|
allocate distinct sequence values, the values may be generated out of
|
|
|
|
sequence when all the backends are considered. (For example, with a cache
|
|
|
|
setting of 10, backend A might reserve values 1..10 and return nextval=1,
|
|
|
|
then
|
|
|
|
backend B might reserve values 11..20 and return nextval=11 before backend
|
|
|
|
A has generated nextval=2.) Thus, with a cache setting of one it is safe
|
|
|
|
to assume that nextval values are generated sequentially; with a cache
|
|
|
|
setting greater than one you should only assume that the nextval values
|
|
|
|
are all distinct, not that they are generated purely sequentially.
|
|
|
|
Also, last_value will reflect the latest value reserved by any backend,
|
|
|
|
whether or not it has yet been returned by nextval.
|
|
|
|
</para>
|
|
|
|
</caution>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
|
|
|
<refsect2 id="R2-SQL-CREATESEQUENCE-3">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-09-11</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-07-14 05:47:34 +02:00
|
|
|
Notes
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
2000-05-08 18:19:56 +02:00
|
|
|
Use <command>DROP SEQUENCE</command> to remove a sequence.
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
1998-07-14 05:47:34 +02:00
|
|
|
<para>
|
|
|
|
Each backend uses its own cache to store allocated numbers.
|
|
|
|
Numbers that are cached but not used in the current session will be
|
1998-09-16 16:43:12 +02:00
|
|
|
lost, resulting in "holes" in the sequence.
|
1998-07-14 05:47:34 +02:00
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsect2>
|
1998-07-14 05:47:34 +02:00
|
|
|
</refsect1>
|
1999-07-06 19:16:42 +02:00
|
|
|
|
|
|
|
<refsect1 id="R1-SQL-CREATESEQUENCE-2">
|
|
|
|
<title>
|
1998-07-14 05:47:34 +02:00
|
|
|
Usage
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
<para>
|
1998-09-16 16:43:12 +02:00
|
|
|
Create an ascending sequence called <literal>serial</literal>, starting at 101:
|
1999-07-06 19:16:42 +02:00
|
|
|
</para>
|
|
|
|
<programlisting>
|
1998-09-16 16:43:12 +02:00
|
|
|
CREATE SEQUENCE serial START 101;
|
1999-07-06 19:16:42 +02:00
|
|
|
</programlisting>
|
1998-07-14 05:47:34 +02:00
|
|
|
<para>
|
2000-07-21 06:25:05 +02:00
|
|
|
Select the next number from this sequence:
|
1998-07-14 05:47:34 +02:00
|
|
|
<programlisting>
|
1998-09-16 16:43:12 +02:00
|
|
|
SELECT NEXTVAL ('serial');
|
1998-07-14 05:47:34 +02:00
|
|
|
|
1998-09-16 16:43:12 +02:00
|
|
|
nextval
|
|
|
|
-------
|
|
|
|
114
|
1998-07-14 05:47:34 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
|
|
|
<para>
|
|
|
|
Use this sequence in an INSERT:
|
|
|
|
<programlisting>
|
1998-09-16 16:43:12 +02:00
|
|
|
INSERT INTO distributors VALUES (NEXTVAL('serial'),'nothing');
|
1998-07-14 05:47:34 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
1998-10-21 07:34:12 +02:00
|
|
|
|
|
|
|
<para>
|
|
|
|
Set the sequence value after a COPY FROM:
|
|
|
|
<programlisting>
|
1999-07-06 19:16:42 +02:00
|
|
|
CREATE FUNCTION distributors_id_max() RETURNS INT4
|
1998-12-29 03:24:47 +01:00
|
|
|
AS 'SELECT max(id) FROM distributors'
|
|
|
|
LANGUAGE 'sql';
|
1999-07-06 19:16:42 +02:00
|
|
|
BEGIN;
|
1998-12-29 03:24:47 +01:00
|
|
|
COPY distributors FROM 'input_file';
|
|
|
|
SELECT setval('serial', distributors_id_max());
|
1999-07-06 19:16:42 +02:00
|
|
|
END;
|
1998-10-21 07:34:12 +02:00
|
|
|
</programlisting>
|
|
|
|
</para>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refsect1>
|
|
|
|
|
|
|
|
<refsect1 id="R1-SQL-CREATESEQUENCE-3">
|
|
|
|
<title>
|
1998-07-14 05:47:34 +02:00
|
|
|
Compatibility
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
|
|
|
|
|
|
|
<refsect2 id="R2-SQL-CREATESEQUENCE-4">
|
|
|
|
<refsect2info>
|
|
|
|
<date>1998-09-11</date>
|
|
|
|
</refsect2info>
|
|
|
|
<title>
|
1998-07-14 05:47:34 +02:00
|
|
|
SQL92
|
1999-07-06 19:16:42 +02:00
|
|
|
</title>
|
1999-07-22 17:09:15 +02:00
|
|
|
|
1999-07-06 19:16:42 +02:00
|
|
|
<para>
|
1999-07-22 17:09:15 +02:00
|
|
|
<command>CREATE SEQUENCE</command> is a <productname>Postgres</productname>
|
|
|
|
language extension.
|
1998-09-16 16:43:12 +02:00
|
|
|
There is no <command>CREATE SEQUENCE</command> statement
|
1999-07-06 19:16:42 +02:00
|
|
|
in <acronym>SQL92</acronym>.
|
|
|
|
</para>
|
1998-07-14 05:47:34 +02:00
|
|
|
</refsect2>
|
|
|
|
</refsect1>
|
1999-07-06 19:16:42 +02:00
|
|
|
</refentry>
|
1998-07-14 05:47:34 +02:00
|
|
|
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
|
|
Local variables:
|
|
|
|
mode: sgml
|
1999-07-06 19:16:42 +02:00
|
|
|
sgml-omittag:nil
|
1998-07-14 05:47:34 +02:00
|
|
|
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:
|
1998-08-15 09:00:37 +02:00
|
|
|
-->
|