PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

F.49. uuid-ossp — UUID 生成器 #

F.49.1. uuid-ossp 函数
F.49.2. 构建 uuid-ossp
F.49.3. 作者

uuid-ossp 模块提供使用多种标准算法生成通用唯一标识符(UUID)的函数。此外还有一些函数用于产生特定的 UUID 常量。该模块仅在需求超出 PostgreSQL 核心能力时才需要使用。内置的 UUID 生成方式请参见 Section 9.14。

该模块被视为“可信”模块,也就是说,拥有当前数据库 CREATE 权限的非超级用户也可以安装它。

F.49.1. uuid-ossp 函数 #

Table F.35 展示了可用于生成 UUID 的函数。相关标准 ITU-T Rec. X.667、ISO/IEC 9834-8:2005 以及 RFC 4122 规定了四种 UUID 生成算法,对应版本号 1、3、4 与 5。(没有版本 2 算法。)这些算法各自适用于不同的应用场景。

Table F.35. UUID 生成函数

函数

描述

uuid_generate_v1 () → uuid

生成版本 1 的 UUID。它由计算机的 MAC 地址与一个时间戳构成。请注意,这类 UUID 会暴露创建该标识符的计算机的身份及其创建时间,这可能会使其不适合某些安全敏感的应用。

uuid_generate_v1mc () → uuid

生成版本 1 的 UUID,但使用随机多播 MAC 地址而非计算机的真实 MAC 地址。

uuid_generate_v3 ( namespace uuid, name text ) → uuid

在给定的命名空间中使用指定的输入名称生成版本 3 的 UUID。命名空间应当是 Table F.36 中所示的 uuid_ns_*() 函数产生的特殊常量之一。(理论上也可以是任意 UUID。)名称是所选命名空间中的一个标识符。

例如:

SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');

名称参数会被 MD5 散列,因此无法从生成的 UUID 反推出明文。这种方法生成 UUID 不包含任何随机或依赖环境的因素,因此结果是可重现的。

uuid_generate_v4 () → uuid

生成版本 4 的 UUID,它完全由随机数构成。

uuid_generate_v5 ( namespace uuid, name text ) → uuid

生成版本 5 的 UUID,其工作方式与版本 3 的 UUID 类似,只是使用 SHA-1 作为散列方法。由于 SHA-1 被认为比 MD5 更安全,版本 5 应优先于版本 3 使用。


Table F.36. 返回 UUID 常量的函数

函数

描述

uuid_nil () → uuid

返回一个 “nil” UUID 常量,它不会作为真实的 UUID 出现。

uuid_ns_dns () → uuid

返回指定 UUID 的 DNS 命名空间的常量。

uuid_ns_url () → uuid

返回指定 UUID 的 URL 命名空间的常量。

uuid_ns_oid () → uuid

返回指定 UUID 的 ISO 对象标识符(OID)命名空间的常量。(它对应 ASN.1 OID,与 PostgreSQL 中使用的 OID 无关。)

uuid_ns_x500 () → uuid

返回指定 UUID 的 X.500 可识别名称(DN)命名空间的常量。


F.49.2. 构建 uuid-ossp #

该模块在历史上依赖 OSSP UUID 库,这也是其名称的由来。虽然 OSSP UUID 库仍可从 http://www.ossp.org/pkg/lib/uuid/ 获取,但它维护不善,移植到较新平台也日益困难。uuid-ossp 现在可以在某些平台上不依赖 OSSP 库构建。在 FreeBSD 及其他一些源自 BSD 的平台上,核心 libc 库已内置合适的 UUID 创建函数。在 Linux、macOS 及其他一些平台上,libuuid 库提供了合适的函数,该库最初来自 e2fsprogs 项目(在现代 Linux 上它被视为 util-linux-ng 的一部分)。调用 configure 时,指定 --with-uuid=bsd 使用 BSD 函数,指定 --with-uuid=e2fs 使用 e2fsprogs 的 libuuid,或指定 --with-uuid=ossp 使用 OSSP UUID 库。一台机器上可能同时可用多个这样的库,因此 configure 不会自动选择。

F.49.3. 作者 #

Peter Eisentraut