2024 年 9 月 26 日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

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

The uuid-ossp 模块提供函数,使用几种标准算法之一生成通用唯一标识符(UUID)。还有一些函数可以生成某些特殊的 UUID 常量。此模块仅在核心 PostgreSQL 中提供的功能以外有特殊要求时才需要。有关生成 UUID 的内置方法,请参见 第 9.14 节

此模块被认为是 受信任的,也就是说,它可以由在当前数据库上具有 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 无关。)

uuid_ns_x500 () → uuid

返回一个常量,用于指定用于 UUID 的 X.500 可辨识名称 (DN) 命名空间。


F.47.2. 构建 uuid-ossp #

从历史上看,此模块依赖于 OSSP UUID 库,这是该模块名称的由来。虽然仍然可以在 http://www.ossp.org/pkg/lib/uuid/ 找到 OSSP 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

提交更正

如果您在文档中发现任何不正确的地方,与您对特定功能的体验不符,或者需要进一步澄清,请使用 此表格 报告文档问题。