0% found this document useful (0 votes)
108 views3 pages

Using PostgreSQL SERIAL To Create Auto Increment Column

This tutorial discusses how to use PostgreSQL's SERIAL pseudo-type to automatically increment primary key values. The SERIAL pseudo-type creates a sequence object, sets the column as NOT NULL, assigns the sequence owner to the column, and defaults the column to the next value from the sequence. This provides auto-increment functionality similar to other databases like MySQL. The tutorial also provides examples of inserting and retrieving values from a SERIAL column.

Uploaded by

leonard1971
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
108 views3 pages

Using PostgreSQL SERIAL To Create Auto Increment Column

This tutorial discusses how to use PostgreSQL's SERIAL pseudo-type to automatically increment primary key values. The SERIAL pseudo-type creates a sequence object, sets the column as NOT NULL, assigns the sequence owner to the column, and defaults the column to the next value from the sequence. This provides auto-increment functionality similar to other databases like MySQL. The tutorial also provides examples of inserting and retrieving values from a SERIAL column.

Uploaded by

leonard1971
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 3

Using PostgreSQL SERIAL To Create Auto-

increment Column
?

Summary: in this tutorial, we will introduce you to the


PostgreSQL SERIAL and show you how to use the serial to create an auto-increment column in a
database table.

Introduction to the PostgreSQL SERIAL pseudo-type


In PostgreSQL, a sequence is a special kind of database object that generates a sequence of
integers. A sequence is often used as a primary key column. The concept of the sequence in
PostgreSQL is similar to the AUTO_INCREMENT concept in MySQL.

When creating a new table, the sequence is created through the SERIAL pseudo-type as follows:
1 CREATE TABLE table_name(
2 id SERIAL
3 );
By assigning the SERIAL pseudo-type to the id column, PostgreSQL will perform the following:

 Creates a sequence object and set the next value generated by the sequence as the default
value for the column.
 Adds the NOT NULL constraint to the column because a sequence always generates an
integer, which is a non-null value.
 Assigns the owner of the sequence to the id column; as a result, the sequence object is
deleted when the id column or table is dropped
Behind the scenes, the following statement:

1 CREATE TABLE table_name(


2 id SERIAL
3 );
is equivalent to the following statements:

1 CREATE SEQUENCE table_name_id_seq;


2
3 CREATE TABLE table_name (
4 id integer NOT NULL DEFAULT nextval('table_name_id_seq')
5 );
6
7 ALTER SEQUENCE table_name_id_seq
8 OWNED BY table_name.id;
PostgreSQL provides three serial pseudo-types SMALLSERIAL , SERIAL , and BIGSERIAL with the
following characteristics:
Name Storage Size Range
SMALLSERIAL 2 bytes 1 to 32,767
SERIAL 4 bytes 1 to 2,147,483,647
BIGSERIAL 8 bytes 1 to 922,337,2036,854,775,807

PostgresQL SERIAL example


It is important to note that the SERIAL does not implicitly create an index on the column or make the
column as the primary key column. However, this can be done easily by specifying the PRIMARY
KEY constraint for the SERIAL column.
The following statement creates the fruits table with the id column is the SERIAL column:
1 CREATE TABLE fruits(
2 id SERIAL PRIMARY KEY,
3 name VARCHAR NOT NULL
4 );
To assign the default value for the serial column, you ignore the column or use
the DEFAULT keyword in the INSERT statement.
See the following example:

1 INSERT INTO fruits(name) VALUES('orange');


And

1 INSERT INTO fruits(id,name) VALUES(DEFAULT,'apple');


PostgreSQL inserted two rows into the fruits table with the values for the id column are 1 and 2.
1 SELECT *
2 FROM fruits;
1 id | name
2 ----+--------
3 1 | apple
4 2 | orange
5 (2 rows)
To get the sequence name of a SERIAL column in a table, you use
the pg_get_serial_sequence() function as follows:
1 pg_get_serial_sequence('table_name','column_name')
You can pass a sequence name to the currval() function to get the recent value generated by a
sequence. For example, the following statement returns the recent value generated by
the fruits_id_seq object:
1 SELECT currval(pg_get_serial_sequence('fruits', 'id'));
1 currval
2 ---------
3 2
4 (1 row)
If you want to get the value generated by the sequence when you insert a new row into the table,
you use the RETURNING id clause in the INSERT statement. The following statement inserts a new
row into the fruits table and returns the value generated for the id column.
1 INSERT INTO fruits(name) VALUES('banana')
2 RETURNING id;
1 id
2 ----
3 3
4 (1 row)
The sequence generator operation is not transaction-safe. It means that if two concurrent database
connections attempt to get the next value from a sequence, each client will get a different value. If
one of the clients rolls back the transaction, the sequence number of that client will be unused,
creating a gap in the sequence.

In this tutorial, you have learned how to use the serial data type to create an auto-increment column
for a database table.

Related Tutorials
 PostgreSQL Data Types

You might also like