UUID
是一种用于存储通用唯一标识符的数据类型。
UUID
支持在PostgreSQL 8.3中添加。
用法
UUID
表示一个128位数量,通常由算法生成,以确保在实际应用中,生成的value是唯一的。
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博客文章