PostgreSQL uuid-ossp

2021-09-16 17:35 更新
F.44.1. uuid-ossp 函數(shù)
F.44.2. 編譯uuid-ossp

uuid-ossp模塊提供函數(shù)使用幾種標(biāo)準(zhǔn)算法之一產(chǎn)生通用唯一標(biāo)識(shí)符(UUID)。還提供產(chǎn)生某些特殊 UUID 常量的函數(shù)。此模塊僅適用于核心PostgreSQL中提供的以外的特殊要求。有關(guān)生成UUID的內(nèi)置方法,請參見第 9.14 節(jié)。

這個(gè)模塊被認(rèn)為是可信的,也就是說,它可以由對當(dāng)前數(shù)據(jù)庫具有CREATE權(quán)限的非超級用戶安裝。

F.44.1. uuid-ossp 函數(shù)

表 F.32展示了可用來產(chǎn)生 UUID 的函數(shù)。相關(guān)標(biāo)準(zhǔn) ITU-T Rec. X.667、ISO/IEC 9834-8:2005 以及 RFC 4122 指定了四種用于產(chǎn)生 UUID 的算法,分別用版本號 1、3、4、5 標(biāo)識(shí)(沒有版本 2 的算法)。這些算法中的每一個(gè)都適合于不同的應(yīng)用集合。

表 F.32. 用于 UUID 產(chǎn)生的函數(shù)

函數(shù)

簡述

uuid_generate_v1 () → uuid

產(chǎn)生一個(gè)版本 1 的 UUID。這涉及到計(jì)算機(jī)的 MAC 地址和一個(gè)時(shí)間戳。注意這種 UUID 會(huì)泄露產(chǎn)生該標(biāo)識(shí)符的計(jì)算機(jī)標(biāo)識(shí)以及產(chǎn)生的時(shí)間,因此它不適合某些對安全性很敏感的應(yīng)用。

uuid_generate_v1mc () → uuid

這個(gè)函數(shù)產(chǎn)生一個(gè)版本 1 的 UUID,但是使用一個(gè)隨機(jī)廣播 MAC 地址而不是該計(jì)算機(jī)真實(shí)的 MAC 地址。

uuid_generate_v3 ( namespace uuid, name text ) → uuid

使用指定的輸入名稱在給定的名字空間中產(chǎn)生一個(gè)版本 3 的 UUID。該名字空間應(yīng)該是由uuid_ns_*()函數(shù)(如表 F.33所示)產(chǎn)生的特殊常量之一(理論上它可以是任意 UUID)。名稱是選擇的名字空間中的一個(gè)標(biāo)識(shí)符。

例如:

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

名稱參數(shù)將使用 MD5 進(jìn)行哈希,因此從產(chǎn)生的 UUID 中得不到明文。采用這種方法的 UUID 生成沒有隨機(jī)性并且不涉及依賴于環(huán)境的元素,因此是可以重現(xiàn)的。

uuid_generate_v4 () → uuid

產(chǎn)生一個(gè)版本 4 的 UUID,它完全從隨機(jī)數(shù)產(chǎn)生。

uuid_generate_v5 ( namespace uuid, name text ) → uuid

產(chǎn)生一個(gè)版本 5 的 UUID,它和版本 3 的 UUID 相似,但是采用的是 SHA-1 作為哈希方法。版本 5 比版本 3 更好,因?yàn)?SHA-1 被認(rèn)為比 MD5 更安全。


表 F.33. 返回 UUID 常量的函數(shù)

函數(shù)

簡述

uuid_nil () → uuid

返回一個(gè)nilUUID 常量,它不作為一個(gè)真正的 UUID 出現(xiàn)。

uuid_ns_dns () → uuid

返回為 UUID 指定 DNS 名字空間的常量。

uuid_ns_url () → uuid

返回為 UUID 指定 URL 名字空間的常量。

uuid_ns_oid () → uuid

返回為 UUID 指定 ISO 對象標(biāo)識(shí)符(OID) 名字空間的常量(這屬于 ASN.1 OID,它與PostgreSQL使用的 OID 無關(guān))。

uuid_ns_x500 () → uuid

返回為 UUID 指定 X.500 可識(shí)別名(DN)名字空間的常量。


F.44.2. 編譯uuid-ossp

在歷史上這個(gè)模塊依賴于 OSSP UUID 庫,這也是這個(gè)模塊名稱的由來。雖然 現(xiàn)在還能在http://www.ossp.org/pkg/lib/uuid/上 找到 OSSP UUID 庫,但是它已經(jīng)不再被維護(hù)并且越來越難以被一直到新的平臺(tái)。 uuid-ossp現(xiàn)在在一些平臺(tái)上可以脫離 OSSP 庫被編譯。在 FreeBSD、NetBSD 和一些其他源自 BSD 的平臺(tái)上,在核心的libc 庫中已經(jīng)包括了合適的 UUID 創(chuàng)建函數(shù)。在 Linux、macOS和一些其他平臺(tái)上, libuuid庫中提供了合適的函數(shù),它最初是來自于 e2fsprogs項(xiàng)目(不過在現(xiàn)代 Linux 上它被認(rèn)為是 util-linux-ng的一部分)。在調(diào)用 configure時(shí), 指定--with-uuid=bsd可使用 BSD 的函數(shù),指定 --with-uuid=e2fs會(huì)使用e2fsprogslibuuid,指定--with-uuid=ossp則會(huì) 使用 OSSP UUID 庫。在一臺(tái)特定的機(jī)器上可能會(huì)存在多種上述的庫,因此 configure不會(huì)自動(dòng)選擇其中一個(gè)。

 


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號