F.45. uuid-ossp

uuid-ossp模块提供了使用几种标准算法之一生成通用唯一标识符(UUID)的功能。还有一些函数可以产生某些特殊的 UUID 常数。

F.45.1. uuid-ossp 函数

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

表 F.33.UUID 生成的功能

FunctionDescription
uuid_generate_v1() 此函数生成版本 1 UUID。这涉及计算机的 MAC 地址和时间戳。请注意,这种 UUID 会揭示创建标识符的计算机的身份以及创建标识符的时间,这可能使其不适用于某些对安全敏感的应用程序。
uuid_generate_v1mc() 此函数生成版本 1 UUID,但使用随机多播 MAC 地址而不是计算机的实际 MAC 地址。
uuid_generate_v3(namespace uuid, name text) 此函数使用指定的 Importing 名称在给定的名称空间中生成版本 3 UUID。名称空间应该是Table F.34中显示的uuid_ns_*()函数产生的特殊常量之一。 (理论上可以是任何 UUID.)名称是所选名称空间中的标识符。


For example:
SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');
名称参数将是 MD5 哈希值,因此无法从生成的 UUID 导出明文。通过这种方法生成的 UUID 没有随机或与环境相关的元素,因此可重复。
| uuid_generate_v4() |此函数生成版本 4 UUID,该版本完全由随机数得出。
| uuid_generate_v5(namespace uuid, name text) |此函数生成版本 5 UUID,该版本类似于版本 3 UUID,不同之处在于 SHA-1 被用作哈希方法。应该认为版本 5 优于版本 3,因为认为 SHA-1 比 MD5 更安全。

表 F.34.返回 UUID 常量的函数

uuid_nil()“ nil” UUID 常数,不会作为实际 UUID 出现。
uuid_ns_dns()为 UUID 指定 DNS 名称空间的常量。
uuid_ns_url()为 UUID 指定 URL 名称空间的常量。
uuid_ns_oid()为 UUID 指定 ISO 对象标识符(OID)命名空间的常量。 (这与 ASN.1 OID 有关,与 PostgreSQL 中使用的 OID 不相关.)
uuid_ns_x500()为 UUID 指定 X.500 专有名称(DN)命名空间的常数。

F.45.2. 构建 uuid-ossp

从历史上看,此模块依赖于 OSSP UUID 库,该库说明了模块的名称。尽管仍可以在http://www.ossp.org/pkg/lib/uuid/处找到 OSSP UUID 库,但它维护得不好,并且越来越难移植到较新的平台上。现在可以在某些平台上不使用 OSSP 库的情况下构建uuid-ossp。在 FreeBSD,NetBSD 和其他一些 BSD 衍生的平台上,核心libc库中包含适当的 UUID 创建功能。在 Linux,macOS 和某些其他平台上,libuuid库中提供了适当的功能,该库最初来自e2fsprogs项目(尽管在现代 Linux 上它被视为util-linux-ng的一部分)。调用configure时,请指定--with-uuid=bsd以使用 BSD 函数,或指定--with-uuid=e2fs以使用e2fsprogs'libuuid--with-uuid=ossp以使用 OSSP UUID 库。这些库中的一个以上可能在特定计算机上可用,因此configure不会自动选择一个。

Note

如果只需要随机生成的(版本 4)UUID,请考虑使用pgcrypto模块中的gen_random_uuid()函数。

F.45.3. Author

彼得·艾森特拉特<[email protected]>