2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不再支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3

F.49. uuid-ossp — UUID 生成器 #

uuid-ossp 模組提供了一些函式,用於通過幾種標準演算法生成通用唯一識別符號(UUID)。它還提供了一些函式來生成特定的特殊 UUID 常量。對於核心 PostgreSQL 中未提供的特殊需求,才需要此模組。請參閱 第 9.14 節 瞭解內建的 UUID 生成方法。

此模組被認為是受信任的,這意味著非超級使用者也可以在其擁有的資料庫上安裝它,前提是他們具有 CREATE 許可權。

F.49.1. uuid-ossp 函式 #

F.35 顯示了可用於生成 UUID 的函式。相關的標準 ITU-T Rec. X.667、ISO/IEC 9834-8:2005 和 RFC 4122 指定了四種生成 UUID 的演算法,由版本號 1、3、4 和 5 標識。(沒有版本 2 演算法。)這些演算法中的每一種都可能適用於不同的應用場景。

表 F.35. 用於 UUID 生成的函式

函式

描述

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。名稱空間應為表 F.36 中顯示的 uuid_ns_*() 函式生成的特殊常量之一。(理論上可以是任何 UUID。)名稱是所選名稱空間中的一個識別符號。

例如

SELECT uuid_generate_v3(uuid_ns_url(), 'https://postgres.tw');

名稱引數將進行 MD5 雜湊處理,因此無法從生成的 UUID 中推匯出明文。此方法生成 UUID 沒有隨機或依賴於環境的因素,因此是可重現的。

uuid_generate_v4 () → uuid

生成一個版本 4 的 UUID,它完全由隨機數派生。

uuid_generate_v5 ( namespace uuid, name text ) → uuid

生成一個版本 5 的 UUID,其工作方式類似於版本 3 的 UUID,但使用了 SHA-1 作為雜湊方法。由於 SHA-1 被認為比 MD5 更安全,因此應優先選擇版本 5 而非版本 3。


表 F.36. 返回 UUID 常量的函式

函式

描述

uuid_nil () → uuid

返回一個“nil”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. 構建 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 來使用 e2fsprogslibuuid,或 --with-uuid=ossp 來使用 OSSP UUID 庫。在特定機器上可能不止一種庫可用,因此 configure 不會自動選擇一個。

F.49.3. 作者 #

Peter Eisentraut

提交更正

如果您在文件中發現任何不正確、與您在使用特定功能時的經驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。