PostgreSQL 从 13 版本开始,原生支持顺序 UUID(sequential UUID)生成函数,用于生成在排序和索引上更友好的 UUID。
PostgreSQL 内置的顺序 UUID 生成函数
PostgreSQL 提供了以下函数生成顺序 UUID:
gen_random_uuid() -- 标准的随机 UUID (v4)
uuid_generate_v1() -- 基于时间戳的 UUID (需要 uuid-ossp 扩展)
uuid_generate_v1mc() -- 类似 v1,但使用多播 MAC 地址
uuid_generate_v4() -- 随机 UUID
uuid_generate_v7() -- 顺序 UUID(PostgreSQL 13+,推荐用于排序)
uuid_generate_v7() 是一种基于时间的 顺序 UUID,与传统的 v4 UUID 相比更适合数据库中做主键(性能更好),也比 v1/v1mc 更具隐私性。
如何启用 UUID 函数(包括顺序 UUID)
首先需要启用 uuid-ossp 扩展:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
然后就可以调用 uuid_generate_v7():
SELECT uuid_generate_v7();
返回示例:0657c4d4-cc13-7122-b9b1-23b0ebf4f57c
uuid_generate_v7() 使用建议
如果需要一个可排序、索引友好、同时具备一定唯一性和隐私性的 UUID,uuid_generate_v7() 是目前 PostgreSQL 最推荐的版本。
如果使用 ORM(如 EF Core / Hibernate / Dapper 等),建议将主键类型设置为 UUID,并在数据库中设定默认值:
ALTER TABLE your_table
ALTER COLUMN id SET DEFAULT uuid_generate_v7();