序列与自增列
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)
-- 需要扩展