Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

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

F.47.1. uuid-ossp 函数
F.47.2. 构建 uuid-ossp
F.47.3. 作者

uuid-ossp 模块提供函数,用于使用多种标准算法生成通用唯一标识符 (UUID)。另外还有生成某些特殊 UUID 常量的函数。该模块仅针对核心 PostgreSQL 中无法满足的特殊要求。参阅 第 9.14 节 中生成 UUID 的内置方式。

此模块被视为 受信任,即,可以使用当前数据库的 CREATE 权限安装它(无需超级用户)。

F.47.1. uuid-ossp 函数 #

表 F.33 中展示了可以生成 UUID 的函数。相关的标准 ITU-T Rec. X.667、ISO/IEC 9834-8:2005 及 RFC 4122 指定了四种生成 UUID 的算法,分别由版本号 1、3、4 和 5 识别。(不存在版本 2 算法。)每种算法都适用于不同的应用程序集。

表 F.33. 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。命名空间应该是 表 F.34 中展示的 uuid_ns_*() 函数生成的一些特殊常量。理论上,它也可以是任何 UUID。名称是所选命名空间中的标识符。

例如

SELECT uuid_generate_v3(uuid_ns_url(), 'https://postgresql.ac.cn');

名称参数将进行 MD5 哈希,因此无法从生成中得来 UUID 推导出明文。通过这种方法生成的 UUID 没有随机或环境相关因素,因此是可重复的。

uuid_generate_v4 () → uuid

生成一个版本 4 UUID,它完全从随机数中获取。

uuid_generate_v5 ( namespace uuid, name text ) → uuid

生成版本 5 的 UUID,与版本 3 UUID 的运作方式相同,但其使用 SHA-1 作为哈希方法。版本 5 应该比版本 3 更受青睐,因为 SHA-1 被认为比 MD5 更安全。


表 F.34. 返回 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) 命名空间的常量。(这与 PostgreSQL 中使用的 OID 无关,它属于 ASN.1 OID。)

uuid_ns_x500 () → uuid

返回一个指定 UUID 的 X.500 专用名称 (DN) 命名空间的常量。


F.47.2. 构建 uuid-ossp #

历史上,该模块是依赖于 OSSP UUID 库的,这也是该模块名称的由来。虽然 OSSP UUID 库仍可在 http://www.ossp.org/pkg/lib/uuid/ 找到,但它尚未得到很好的维护,而且越来越难以将其移植到较新的平台上。现在可以在某些平台上在不使用 OSSP 库的情况下构建 uuid-ossp。在 FreeBSD 和其他一些源自 BSD 的平台上,核心 libc 库中包含有合适的 UUID 创建函数。在 Linux、macOS 和其他一些平台上,libuuid 库中提供了合适的函数,该库最初来自 e2fsprogs 项目(尽管在现代 Linux 中,它被认为是 util-linux-ng 的一部分)。在调用 configure 的时候,指定 --with-uuid=bsd 使用 BSD 函数,或指定 --with-uuid=e2fs 使用 e2fsprogslibuuid,或指定 --with-uuid=ossp 使用 OSSP UUID 库。特定计算机上可能存在多个这样的库,因此 configure 不会自动选择一个。

F.47.3. 作者 #

Peter Eisentraut