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

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

uuid-ossp 模块提供了一些函数,用于通过几种标准算法生成通用唯一标识符(UUID)。它还提供了一些函数来生成特定的特殊 UUID 常量。对于核心 PostgreSQL 中未提供的特殊需求,才需要此模块。请参阅 第 9.14 节 了解内置的 UUID 生成方法。

此模块被认为是受信任的,这意味着非超级用户也可以在其拥有的数据库上安装它,前提是他们具有 CREATE 权限。

F.49.1. uuid-ossp 函数 #

F.35 显示了可用于生成 UUID 的函数。相关的标准 ITU-T Rec. X.667、ISO/IEC 9834-8:2005 和 RFC 4122 指定了四种生成 UUID 的算法,由版本号 1、3、4 和 5 标识。(没有版本 2 算法。)这些算法中的每一种都可能适用于不同的应用场景。

表 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。命名空间应为表 F.36 中显示的 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 作为哈希方法。由于 SHA-1 被认为比 MD5 更安全,因此应优先选择版本 5 而非版本 3。


表 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 来使用 e2fsprogslibuuid,或 --with-uuid=ossp 来使用 OSSP UUID 库。在特定机器上可能不止一种库可用,因此 configure 不会自动选择一个。

F.49.3. 作者 #

Peter Eisentraut

提交更正

如果您在文档中发现任何不正确、与您在使用特定功能时的经验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。