Postgresql 中文操作指南
F.49. uuid-ossp — a UUID generator #
uuid-ossp 模块提供函数,使用几种标准算法来生成通用唯一标识符 (UUID)。还有一些函数生成某些特殊的 UUID 常量。此模块仅适用于核心 PostgreSQL 中无法满足的特殊需求。请参阅 Section 9.14 中内置生成 UUID 的方法。
此模块被认为是“受信任的”,也就是说,它可以由在当前数据库上具有 CREATE 权限的非超级用户安装。
F.49.1. uuid-ossp Functions #
Table F.34 显示了可用于生成 UUID 的函数。相关的标准 ITU-T Rec. X.667、ISO/IEC 9834-8:2005 和 RFC 4122 指定了四种用于生成 UUID 的算法,其版本编号分别为 1、3、4 和 5。(没有版本 2 算法。)这些算法中的每一个都适用于不同的应用程序集。
Table F.34. Functions for UUID Generation
Function Description |
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 *()_ 函数生成的特殊常量之一,如 Table F.35 所示。(理论上它可以是任何 UUID。)名称是选定命名空间中的标识符。例如:SELECT uuid_generate_v3(uuid_ns_url(), 'http://www.postgresql.org');name 参数将经过 MD5 哈希处理,因此无法从生成的 UUID 中派生出明文。通过此方法生成的 UUID 没有随机或环境相关元素,因此可以重现。 |
uuid_generate_v4 () → uuid 生成版本 4 UUID,该 UUID 完全来自随机数。 |
uuid_generate_v5 ( namespace uuid , name text ) → uuid 生成版本 5 UUID,其工作方式类似于版本 3 UUID,只不过使用 SHA-1 作为哈希方法。由于 SHA-1 被认为比 MD5 更安全,因此应该优先考虑版本 5 而非版本 3。 |
Table F.35. Functions Returning UUID Constants
Function Description |
uuid_nil () → uuid 返回“空”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. Building 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 不会自动选择一个。
F.49.3. Author #
Peter Eisentraut < link:mailto:peter_e@gmx.net[peter_e@gmx.net]>