Sequences

SEQUENCE declarations with AS, START, INCREMENT, MINVALUE, MAXVALUE, CACHE, CYCLE, and OWNED BY.

Sequences are schema-level objects. Do not declare sequences that back GENERATED AS IDENTITY or SERIAL columns — PostgreSQL manages those automatically.

Basic sequence

SCHEMA public {
    SEQUENCE order_number_seq;
}
-- emits
CREATE SEQUENCE "public"."order_number_seq";

Sequence with all options

SCHEMA public {
    SEQUENCE order_number_seq
        AS BIGINT
        START WITH  10000
        INCREMENT BY 1
        MINVALUE     10000
        MAXVALUE     99999999
        CACHE        50
        NO CYCLE
        OWNED BY orders.order_number;
}
-- emits
CREATE SEQUENCE "public"."order_number_seq"
    AS bigint
    START WITH  10000
    INCREMENT BY 1
    MINVALUE     10000
    MAXVALUE     99999999
    CACHE        50
    NO CYCLE
    OWNED BY "public"."orders"."order_number";

Altering sequence options

Changing any option emits ALTER SEQUENCE:

-- change CACHE from 50 to 100
SEQUENCE order_number_seq
    AS BIGINT
    START WITH 10000
    CACHE      100
    OWNED BY orders.order_number;
-- emits
ALTER SEQUENCE "public"."order_number_seq" CACHE 100;

Renaming or moving a sequence

SEQUENCE archive.invoice_no { RENAMED FROM public.order_no; }
-- emits
ALTER SEQUENCE "public"."order_no" SET SCHEMA "archive";
ALTER SEQUENCE "archive"."order_no" RENAME TO "invoice_no";

The sequence keeps its current value.

Removing a sequence

Removing a sequence from source emits DROP SEQUENCE — always DESTRUCTIVE.