Skip to content

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

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

uuid-ossp模块提供函数,使用多个标准算法之一生成通用唯一标识符 (UUID)。还有函数生成某些特殊 UUID 常量。此模块仅对超出核心PostgreSQL中可用功能的特殊要求有必要。请参阅第 9.14 节,了解生成 UUID 的内置方法。

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

F.49.1.uuid-ossp函数#

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

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

例如

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

name 参数将经过 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.35. 返回 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/中找到,但它维护不善,并且越来越难以移植到较新的平台上。现在可以在某些平台上在没有 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.49.3. 作者#

Peter Eisentraut<[[email protected]](/cdn-cgi/l/email-protection#daaabfaebfa885bf9abdb7a2f4b4bfae)>