uuid-ossp
模块提供了使用几种标准算法生成通用唯一标识符(UUID)的函数。还有一些函数可以生成某些特殊的 UUID 常量。此模块仅在核心 PostgreSQL 中提供的功能无法满足特殊需求时才需要。有关生成 UUID 的内置方法,请参阅第 9.14 节。
此模块被认为是“受信任的”,也就是说,拥有当前数据库的 CREATE
权限的非超级用户可以安装它。
uuid-ossp
函数 #表 F.33 显示了可用于生成 UUID 的函数。相关的标准 ITU-T Rec. X.667、ISO/IEC 9834-8:2005 和 RFC 4122 指定了四种生成 UUID 的算法,分别以版本号 1、3、4 和 5 标识。(没有版本 2 算法。)这些算法中的每一种都可能适用于不同的应用场景。
表 F.33. 用于 UUID 生成的函数
函数 描述 |
---|
生成版本 1 的 UUID。这涉及到计算机的 MAC 地址和时间戳。请注意,这种 UUID 会泄露创建标识符的计算机的身份及其创建时间,这可能使其不适合某些对安全性敏感的应用。 |
生成版本 1 的 UUID,但使用随机多播 MAC 地址而不是计算机的真实 MAC 地址。 |
使用指定的输入名称,在给定的命名空间中生成版本 3 的 UUID。命名空间应该是 表 F.34 中所示的 例如 SELECT uuid_generate_v3(uuid_ns_url(), 'https://postgres.ac.cn'); name 参数将进行 MD5 哈希,因此无法从生成的 UUID 中导出明文。通过此方法生成 UUID 没有随机或环境相关的因素,因此是可重现的。 |
生成版本 4 的 UUID,它完全从随机数派生。 |
生成版本 5 的 UUID,其工作方式类似于版本 3 的 UUID,只不过 SHA-1 用作哈希方法。版本 5 应该优先于版本 3,因为 SHA-1 被认为比 MD5 更安全。 |
表 F.34. 返回 UUID 常量的函数
函数 描述 |
---|
返回一个“nil” UUID 常量,它不会作为真实的 UUID 出现。 |
返回一个指定 UUID 的 DNS 命名空间的常量。 |
返回一个指定 UUID 的 URL 命名空间的常量。 |
返回一个指定 UUID 的 ISO 对象标识符 (OID) 命名空间的常量。(这涉及到 ASN.1 OID,它与 PostgreSQL 中使用的 OID 无关。) |
返回一个指定 UUID 的 X.500 专有名称 (DN) 命名空间的常量。 |
uuid-ossp
#历史上,此模块依赖于 OSSP UUID 库,这解释了模块的名称。虽然仍然可以在 http://www.ossp.org/pkg/lib/uuid/ 找到 OSSP 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 <[email protected]>
如果你在文档中看到任何不正确、与你的特定功能体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。