create_sequence.sgml
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:11k
- <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>
- </refnamediv>
- <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>
- <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 generate. 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 (only one value can be generated at a time, i.e. 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>
- </para>
- </refsect2>
- <refsect2 id="R2-SQL-CREATESEQUENCE-2">
- <refsect2info>
- <date>1998-09-11</date>
- </refsect2info>
- <title>
- Outputs
- </title>
- <para>
- <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.
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
- </para>
- </refsect2>
- </refsynopsisdiv>
- <refsect1 id="R1-SQL-CREATESEQUENCE-1">
- <refsect1info>
- <date>1998-09-11</date>
- </refsect1info>
- <title>
- Description
- </title>
- <para>
- <command>CREATE SEQUENCE</command> will enter a new sequence number generator
- into the current data base. This involves creating and initialising a
- new single-row
- table with the name <replaceable class="parameter">seqname</replaceable>.
- The generator will be "owned" by the user issuing the command.
- </para>
- <para>
- After a 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.
- 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.
- </para>
- <para>
- Use a query like
- <programlisting>
- SELECT * FROM sequence_name;
- </programlisting>
- to get the parameters of a sequence.
- Aside from fetching the original
- parameters, you can use
- <programlisting>
- SELECT last_value FROM sequence_name;
- </programlisting>
- to obtain the last value allocated by any backend.
- parameters, you can use
- </para>
- <para>
- Low-level locking is used to enable multiple simultaneous
- calls to a generator.
- </para>
- <caution>
- <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
- backends. Each backend will allocate "cache" successive sequence values
- 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>
- <refsect2 id="R2-SQL-CREATESEQUENCE-3">
- <refsect2info>
- <date>1998-09-11</date>
- </refsect2info>
- <title>
- Notes
- </title>
- <para>
- Refer to the <command>DROP SEQUENCE</command> 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>
- <para>
- Set the sequence value after a COPY FROM:
- <programlisting>
- CREATE FUNCTION distributors_id_max() RETURNS INT4
- AS 'SELECT max(id) FROM distributors'
- LANGUAGE 'sql';
- BEGIN;
- COPY distributors FROM 'input_file';
- SELECT setval('serial', distributors_id_max());
- END;
- </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: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:
- -->