返回

PostgreSQL 提供了内置的顺序 UUID 生成函数

2025-04-09 PostgreSQL UUID 1960 0

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();
顶部