Skip to content

PostgreSQL AUTO INCREMENT

Overview

PostgreSQL uses SERIAL and IDENTITY columns for auto-incrementing values.

SERIAL

sql
-- Creates sequence and auto-increment column
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

-- Equivalent to:
CREATE SEQUENCE users_id_seq;
CREATE TABLE users (
    id INTEGER NOT NULL DEFAULT nextval('users_id_seq') PRIMARY KEY
);

BIGSERIAL

sql
-- For large tables
CREATE TABLE logs (
    id BIGSERIAL PRIMARY KEY,
    message TEXT
);

SMALLSERIAL

sql
-- For small ranges
CREATE TABLE small_table (
    id SMALLSERIAL PRIMARY KEY,
    name VARCHAR(50)
);

IDENTITY Column

sql
-- Standard SQL identity column
CREATE TABLE users (
    id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

-- Generated by default
CREATE TABLE orders (
    id INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    user_id INTEGER NOT NULL
);

Sequence Functions

sql
-- Get next value
SELECT nextval('users_id_seq');

-- Get current value
SELECT currval('users_id_seq');

-- Set value
SELECT setval('users_id_seq', 1000);

-- Get last value from sequence
SELECT lastval();

Managing Sequences

sql
-- Alter sequence
ALTER SEQUENCE users_id_seq RESTART WITH 1000;
ALTER SEQUENCE users_id_seq INCREMENT BY 2;
ALTER SEQUENCE users_id_seq MINVALUE 1 NO MAXVALUE;

Summary

AUTO INCREMENT methods include:

  • SERIAL (INTEGER), BIGSERIAL, SMALLSERIAL
  • IDENTITY (standard SQL)
  • Sequence functions: nextval, currval, setval
  • ALTER SEQUENCE for management

Content is for learning and research only.