9.3 9.4 9.5 9.6 10 11 12 13 14 15 16 17 Current(18)
PostgreSQL中文社区 问题报告 纠错本页面

8.12. UUID 类型 #

数据类型 uuid 存储通用唯一标识符 (UUID),其定义见 RFC 9562、 ISO/IEC 9834-8:2005 及相关标准。 (一些系统将此数据类型称为全局唯一标识符,或 GUID,。)该 标识符是一个 128 位的量,由一种算法生成, 该算法选择使得在已知宇宙中使用相同算法的其他人生成相同标识符的可能性非常小。 因此,对于分布式系统,这些标识符提供了比序列生成器更好的唯一性保证, 后者仅在单个数据库内唯一。

RFC 9562 定义了 8 种不同的 UUID 版本。每个版本对生成新 UUID 值有特定要求, 并且每个版本提供不同的优点和缺点。 PostgreSQL 原生支持使用 UUIDv4 和 UUIDv7 算法生成 UUID。 另外,UUID 值也可以使用任何算法在数据库外部生成。 数据类型 uuid 可用于存储任何 UUID,无论其来源和 UUID 版本。

一个 UUID 被写成一个小写十六进制位的序列,该序列被连字符分隔成多个组:首先是一个 8 位组,接下来是三个 4 位组,最后是一个 12 位组。总共的 32 位(十六进制位)表示了 128 个二进制位。一个标准形式的 UUID 类似于:

a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

PostgreSQL 也接受另一种输入形式: 使用大写位、标准格式被花括号包围、忽略某些或者全部连字符、在任意 4 位组后面增加一个连字符。例如:

A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}
a0eebc999c0b4ef8bb6d6bb9bd380a11
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
{a0eebc99-9c0b4ef8bb6d6bb9-bd380a11}

输出总是采用标准形式。

对于如何在PostgreSQL中生成UUID,请参见第 9.14 节