前置知识: PostgreSQL

序列与自增列

1 minIntermediate2026/6/14

PostgreSQL序列与自增列:SERIAL、IDENTITY列、序列操作与ID生成策略

1. 序列(SEQUENCE)

-- 创建序列
CREATE SEQUENCE order_seq START 1000 INCREMENT 1;

-- 使用序列
SELECT nextval('order_seq');   -- 获取下一个值
SELECT currval('order_seq');   -- 获取当前会话的当前值
SELECT setval('order_seq', 5000);  -- 设置值

-- 查看序列信息
SELECT * FROM information_schema.sequences WHERE sequence_name = 'order_seq';

2. SERIAL

-- SERIAL 是序列+默认值的语法糖
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    amount DECIMAL(10,2)
);

-- 等价于
CREATE SEQUENCE orders_id_seq;
CREATE TABLE orders (
    id INTEGER NOT NULL DEFAULT nextval('orders_id_seq') PRIMARY KEY,
    amount DECIMAL(10,2)
);
ALTER SEQUENCE orders_id_seq OWNED BY orders.id;

3. IDENTITY 列(SQL 标准)

-- PostgreSQL 10+ 推荐 IDENTITY
CREATE TABLE users (
    id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    name VARCHAR(100)
);

-- GENERATED ALWAYS:不允许手动插入ID
-- GENERATED BY DEFAULT:允许手动插入

CREATE TABLE products (
    id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    name VARCHAR(100)
);

-- 手动插入后重置序列
ALTER TABLE users ALTER COLUMN id RESTART WITH 1000;

4. ID 生成策略

-- 自增ID(简单、有序)
id BIGINT GENERATED ALWAYS AS IDENTITY

-- UUID(全局唯一、无序)
id UUID DEFAULT gen_random_uuid() PRIMARY KEY

-- ULID(有序UUID)
-- 需要扩展