↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 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-ossp 模块提供一些函数,可使用几种标准算法之一生成通用唯一标识符(UUID)。它还提供一些函数,用于生成某些特殊的 UUID 常量。只有在需要核心 PostgreSQL 未提供的特殊功能时,才需要此模块。关于生成 UUID 的内置方式,见第 9.14 节。

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

F.49.1. uuid-ossp 函数 #

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

表 F.32. 用于生成 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.33 所示。(理论上也可以是任意 UUID。)该名称是在所选名字空间中的一个标识符。

例如:

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

名称参数会先做 MD5 hash,因此无法从生成的 UUID 中反推出明文内容。通过这种方法生成 UUID 不包含随机因素,也不依赖于环境,因此结果可重现。

uuid_generate_v4 () → uuid

生成一个版本 4 UUID,它完全来源于随机数。

uuid_generate_v5 ( namespace uuid, name text ) → uuid

生成一个版本 5 UUID,它的工作方式与版本 3 UUID 类似,只是使用 SHA-1 作为 hash 方法。由于 SHA-1 被认为比 MD5 更安全,因此通常应优先使用版本 5 而不是版本 3。


表 F.33. 返回 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 库,这也是该模块名称的由来。虽然在 http://www.ossp.org/pkg/lib/uuid/仍然可以找到 OSSP UUID 库,但它维护得并不好,而且移植到较新的平台上正变得越来越困难。如今,在某些平台上,uuid-ossp 已可在不依赖 OSSP 库的情况下构建。在 FreeBSD 和其他一些 BSD 派生平台上,合适的 UUID 生成功能包含在核心 libc 库中。在 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

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.