DEV Community

wanglei
wanglei

Posted on

Creating and Managing Sequences

Background
A sequence is a database object that generates unique integers. Sequence numbers are generated according to a certain rule. Sequences are unique because they increase automatically. This is why they are often used as primary keys.

You can create a sequence for a column in either of the following methods:

Set the data type of a column to sequence integer. A sequence will be automatically created by the database for this column.
Run the CREATE SEQUENCE statement to create a sequence. Set the initial value of the nextval('sequence_name') function to the default value of a column.
Procedure
Method 1: Set the data type of a column to a sequence integer. For example:

""
CREATE TABLE T1
(
id serial,
name text
);
If the following information is displayed, the table has been created:

""
CREATE TABLE
Method 2: Create a sequence and set the initial value of the nextval('sequence_name') function to the default value of a column.

Create a sequence.

""
CREATE SEQUENCE seq1 cache 100;
If the following information is displayed, the sequence has been created:

""
CREATE SEQUENCE
Set the initial value of the nextval('sequence_name') function to the default value of a column.

""
CREATE TABLE T2
(
id int not null default nextval('seq1'),
name text
);
If the following information is displayed, the default value has been specified:

""
CREATE TABLE
Associate the sequence with a column.

Associates a sequence with a specified column included in a table. In this way, the sequence will be deleted when you delete its associated column or the table where the column belongs to.

""
ALTER SEQUENCE seq1 OWNED BY T2.id;
If the following information is displayed, the column has been specified:

""
ALTER SEQUENCE
NOTE:
The preceding methods are similar, except that the second method specifies cache for the sequence. A sequence having cache defined has inconsecutive values (such as 1, 4, and 5) and cannot maintain the order of its values. After the dependent column of a sequence has been specified, once the sequence is deleted, the sequence of the dependent will be deleted. A sequence shared by multiple columns is not forbidden in a database, but you are not advised to do that.
In the current version, you can specify the auto-increment column or set the default value of a column to nextval('seqname') when defining a table. You cannot add an auto-increment column or a column whose default value is nextval('seqname') to an existing table.

Top comments (0)