UUID
是一种用于存储通用唯一标识符的数据类型。
UUID
支持是在 PostgreSQL 8.3 中添加的。
用法
UUID
代表一个 128 位的量,通常由算法生成,以确保在实际应用中,生成的唯一标识符是唯一的。
PostgreSQL 使用小写十六进制数字生成和存储 UUID
,符合 RFC 4122。
此外,PostgreSQL 还接受以下格式的 UUID
输入值
- 大写十六进制数字
- 标准格式,用大括号括起来
- 省略部分或全部连字符
- 每四位数字后添加连字符
在 PostgreSQL 中生成 UUID
从 PostgreSQL 13 开始,可以使用函数 gen_random_uuid()
生成 UUID
。
contrib 模块 uuid-ossp
提供了生成 UUID
的其他方法。
UUID v7 和 v8
截至 2023 年,存在一个补丁,用于向 PostgreSQL 添加 UUID
v7(以及可能的 v8)支持:UUID v7
更改历史记录
- 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
- 通用唯一标识符 - 维基百科文章
- PostgreSQL 中 UUID 键的意外缺点 - 2023 年 6 月 Ants Aasma / CyberTec 博客文章