uuid-ossp 模块提供使用多种标准算法生成通用唯一标识符(UUID)的函数。此外还有一些函数用于产生特定的 UUID 常量。该模块仅在需求超出 PostgreSQL 核心能力时才需要使用。内置的 UUID 生成方式请参见 Section 9.14。
该模块被视为“可信”模块,也就是说,拥有当前数据库 CREATE 权限的非超级用户也可以安装它。
uuid-ossp 函数 #Table F.35 展示了可用于生成 UUID 的函数。相关标准 ITU-T Rec. X.667、ISO/IEC 9834-8:2005 以及 RFC 4122 规定了四种 UUID 生成算法,对应版本号 1、3、4 与 5。(没有版本 2 算法。)这些算法各自适用于不同的应用场景。
Table F.35. UUID 生成函数
函数 描述 |
|---|
|
生成版本 1 的 UUID。它由计算机的 MAC 地址与一个时间戳构成。请注意,这类 UUID 会暴露创建该标识符的计算机的身份及其创建时间,这可能会使其不适合某些安全敏感的应用。 |
|
生成版本 1 的 UUID,但使用随机多播 MAC 地址而非计算机的真实 MAC 地址。 |
在给定的命名空间中使用指定的输入名称生成版本 3 的 UUID。命名空间应当是 Table F.36 中所示的 例如: SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org'); 名称参数会被 MD5 散列,因此无法从生成的 UUID 反推出明文。这种方法生成 UUID 不包含任何随机或依赖环境的因素,因此结果是可重现的。 |
生成版本 4 的 UUID,它完全由随机数构成。 |
生成版本 5 的 UUID,其工作方式与版本 3 的 UUID 类似,只是使用 SHA-1 作为散列方法。由于 SHA-1 被认为比 MD5 更安全,版本 5 应优先于版本 3 使用。 |
Table F.36. 返回 UUID 常量的函数
函数 描述 |
|---|
返回一个 “nil” UUID 常量,它不会作为真实的 UUID 出现。 |
返回指定 UUID 的 DNS 命名空间的常量。 |
返回指定 UUID 的 URL 命名空间的常量。 |
返回指定 UUID 的 ISO 对象标识符(OID)命名空间的常量。(它对应 ASN.1 OID,与 PostgreSQL 中使用的 OID 无关。) |
返回指定 UUID 的 X.500 可识别名称(DN)命名空间的常量。 |
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 使用 e2fsprogs 的 libuuid,或指定 --with-uuid=ossp 使用 OSSP UUID 库。一台机器上可能同时可用多个这样的库,因此 configure 不会自动选择。
Peter Eisentraut <peter_e@gmx.net>