uuid-ossp

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 附录 F. 额外提供的模块 | 下一页

# F.44. uuid-ossp

`uuid-ossp`模块提供了一些函数用来生成通用唯一识别码(UUID)， 它支持几种 UUID 产生的标准算法。同时它还提供了一些函数用来产生某些特定 的UUID常量。

## F.44.1. `uuid-ossp` 函数

表 F-30 中的函数用来产生 UUID。 相关标准 ITU-T Rec. X.667, ISO/IEC 9834-8:2005 和 RFC 4122 定义了四种生成 UUID 的算法, 分别在版本 1, 3, 4 和5中定义(没用版本2算法)每个算法适合于不同种类的应用使用。

表 F-30. UUID 生成函数

函数 | 描述
--- | ---
`uuid_generate_v1()` | 这个函数生成版本1的 UUID。它的算法使用了计算机的MAC地址和时间戳。注意这种 UUID 泄露了生成它的计算机标识和生成它的时间，所以它可能不太适合对安全性要求较高的应用。
`uuid_generate_v1mc()` | 这个函数生成一个版本1的 UUID，但是使用一个随机多播 MAC 地址而不是计算机的真实的 MAC 地址。

`uuid_generate_v3(namespace uuid, name text)`

这个函数使用给定的输入名字(name)在给定的命名空间(namespace) 中生成一个版本3的 UUID。给定的命名空间应该是调用表 表 F-31 中的函数 `uuid_ns_*()`返回的常量。(理论上他可能是任何UUID) 参数 name 是一个选定命名空间(namespace)中的标识符。

例如:

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

参数 name会被使用 MD5 算法做哈希，所以从产生的 UUID 中不可能反向获得明文。 利用这个方法生成的 UUID 不需要随机算法不依赖任何运行相关的环境因素，因此生成过程是可重复的。

`uuid_generate_v4()` | 这个函数生成一个版本4的 UUID，它完全依靠随机数。
`uuid_generate_v5(namespace uuid, name text)` | 这个函数生成一个版本5的 UUID，它个工作过程类似于版本3的 UUID，但是它使用的 SHA-1 的哈希算法。因为 SHA-1 算法被认为比 MD5 算法更安全，所有应该尽量使用版本 5 而不版本 3。

表 F-31. 返回 UUID 常量的函数

`uuid_nil()` | 一个 "nil" UUID 常量, 它不应该看作一个真正的 UUID。
`uuid_ns_dns()` | 代表 DNS 命令空间的 UUID 常量。
`uuid_ns_url()` | 代表 URL 命名空间的 UUID 常量。
`uuid_ns_oid()` | 代表 ISO 对象标识符(OID)命名空间的 UUID 常量。(它是 ASN.1 的 OID，和 PostgreSQL 用的 OID 没有关系）。
`uuid_ns_x500()` | 代表 X.500 识别名字(DN)命名空间的 UUID 常量

## F.44.2. 建立 `uuid-ossp`

从历史上来说，这个模块依赖于OSSP UUID库，对应于该模块的名字。 OSSP UUID库仍然可以在http://www.ossp.org/pkg/lib/uuid/ 中找到，不过它没有很好的维护了，并且越来越难实现到新平台的端口。 `uuid-ossp`现在在一些平台上的建立可以不带有OSSP库。 在FreeBSD、NetBSD和一些其他BSD驱动的平台上，合适的UUID创建函数包含在内核 `libc`库中。在Linux、OS X和一些其他平台上， 合适的函数在`libuuid`库中提供，它们最初来自 `e2fsprogs`项目（尽管在现代Linux上它被认为是`util-linux-ng` 的一部分）。当调用`configure`时，声明`--with-uuid=bsd` 使用BSD函数，或者声明`--with-uuid=e2fs` 使用`e2fsprogs`的`libuuid`，或者声明 `--with-uuid=ossp`使用OSSP UUID库。 在特别的平台上，可能有多种这样的库可以使用，所以`configure` 并不自动的选择一个。

> 注意: 如果你只需要随机生成（版本4）的UUID，那么请考虑使用来自 pgcrypto模块的`gen_random_uuid()`函数。

## F.44.3. 作者

Peter Eisentraut `<peter_e@gmx.net>`

上一页 | 起始页 | 下一页
unaccent | 上一级 | xml2