UUID 是一种用于存储通用唯一标识符的数据类型。
UUID 支持在 PostgreSQL 8.3 中添加。
用法
一个 UUID 代表一个 128 位的值,通常由算法生成,以确保在实际应用中,生成的该值是唯一的。
PostgreSQL 按照 RFC 4122 标准,使用小写十六进制数字生成和存储 UUID。
此外,PostgreSQL 还接受以下格式的 UUID 输入值:
- 大写十六进制数字
- 标准格式,用花括号括起来
- 省略部分或全部连字符
- 在每四位数字后添加连字符
在 PostgreSQL 中生成 UUID
从 PostgreSQL 13 开始,可以使用函数 gen_random_uuid() 生成 4 类 UUID。
从 PostgreSQL 18 开始,可以使用函数 uuidv7() 生成 7 类 UUID。
contrib 模块 uuid-ossp 提供了额外的 UUID 生成方法。
变更历史
- PostgreSQL 18
UUIDv7支持已添加(提交 78c5e141)
- PostgreSQL 17
- 添加了以下
UUID支持函数(提交 794f10f6)
- 添加了以下
- PostgreSQL 13
- 添加了函数
gen_random_uuid()(提交 5925e554)
- 添加了函数
- PostgreSQL 11
- PostgreSQL 9.4
- PostgreSQL 8.4
UUID输入接受每四位数字后可选的连字符(提交 84aa7972)
- PostgreSQL 8.3
- 已添加(提交 a534068e)
示例
UUID 数据类型的基本用法示例
postgres=# CREATE TABLE uuid_test ( id UUID NOT NULL PRIMARY KEY, val TEXT ); CREATE TABLE postgres=# INSERT INTO uuid_test VALUES ( gen_random_uuid(), 'Hello World' ); INSERT 0 1 postgres=# SELECT * FROM uuid_test; id | val --------------------------------------+------------- c10f1df6-3057-49e1-a92f-dbc920946f5c | Hello World (1 row)
输入格式的变化被视为等同
postgres=# SELECT *
FROM uuid_test
WHERE id = '{C10f-1Df6-3057-49e1-a92f-dbc920946f5c}';
id | val
--------------------------------------+-------------
c10f1df6-3057-49e1-a92f-dbc920946f5c | Hello World
(1 row)
参考资料
- PostgreSQL 文档: UUID 类型
有用链接
- 通用唯一标识符(UUID)URN 命名空间 - RFC 4122
- 通用唯一标识符 - 维基百科文章
- 避免使用 UUID 版本 4 作为主键 - Andrew Atkinson 于 2025 年 7 月的博文
- PostgreSQL 中 UUID 键出乎意料的缺点 - Ants Aasma / CyberTec 于 2023 年 6 月的博文
