CREATE SEQUENCE

Name

CREATE SEQUENCE — creates a new sequence number generator.
   CREATE SEQUENCE seqname
        [INCREMENT increment]
        [MINVALUE  minvalue]
        [MAXVALUE  maxvalue]
        [START     start]
        [CACHE     cache]
        [CYCLE]
  

Inputs

seqname

The name of a sequence to be created.

increment

The INCREMENT increment clause is optional. A positive value will make an ascending sequence, a negative one a descending sequence. The default value is 1.

minvalue

The optional clause MINVALUE minvalue determines the minimum value a sequence can be. The defaults are 1 and -2147483647 for ascending and descending sequences, respectively.

maxvalue

Use the optional clause MAXVALUE maxvalue to determine the maximum value for the sequence. The defaults are 2147483647 and -1 for ascending and descending sequences, respectively.

start

The optional START start clause enables the sequence to begin anywhere. The default starting value is minvalue for ascending sequences and maxvalue for descending ones.

cache

The CACHE cache 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.

CYCLE

The optional CYCLE keyword may be used to enable the sequence to continue when the maxvalue or minvalue has been reached by an ascending or descending sequence respectively. If the limit is reached, the next number generated will be whatever the minvalue or maxvalue is, as appropriate.

Outputs

CREATE

Message returned if the command is successful.

ERROR: amcreate: ' seqname' relation already exists

If the sequence specified already exists.

Description

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 seqname. The generator will be "owned" by the user issuing the command.

After the sequence is created, you may use the function nextval() with the sequence name as the argument to get a new number from the sequence. The function currval('sequence_name') may be used to determine the number returned by the last call to nextval() for the specified sequence in the current session.

Use a query like

    SELECT * FROM sequence_name;
   
to get the parameters of a sequence.

Low-level locking is used to enable multiple simultaneous calls to a generator.

Notes

Refer to the DROP SEQUENCE statement to remove a sequence.

Each backend uses its own cache to store allocated numbers. Numbers that are cached but not used in the current session will be lost.

Usage

Create an ascending sequence called serial, starting at 101:

   CREATE SEQUENCE serial START 101;
  

Select the next number from this sequence

    SELECT NEXTVAL ('serial');
    
    nextval
    -------
        114
   

Use this sequence in an INSERT:

    INSERT INTO distributors VALUES (NEXTVAL ('serial'),'nothing');
   

Compatibility

CREATE SEQUENCE statement is a PostgreSQL language extension.

SQL92

There is no CREATE SEQUENCE statement on SQL92.