本文介紹如何使用UUID-OSSP外掛程式產生UUID。
UUID-OSSP簡介
UUID-OSSP用來產生通用唯一識別碼(UUID), 它支援幾種UUID產生的標準演算法。同時它還提供了一些函數用來產生某些特定的UUID常量。
UUID由32個16進位數字組成,標準格式為一組8位字元 + 一組4位字元 + 一組4位字元 + 一組4位字元 + 一組12位字元,每組字元由短劃線(-)串連,樣本如下:
a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11UUID還支援以下格式:
- 大寫字母
A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11 - 大括弧包裹標準格式
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11} - 省略部分或所有短劃線(-)
a0eebc999c0b4ef8bb6d6bb9bd380a11 - 在任意一組四位元字之後加入一個短劃線(-)
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
外掛程式開啟和關閉
- 開啟UUID-OSSP
CREATE EXTENSION "uuid-ossp"; - 關閉UUID-OSSP
DROP EXTENSION "uuid-ossp";
說明 請使用高許可權帳號安裝此外掛程式。
外掛程式函數說明
- 返回UUID的函數
函數 描述 uuid_generate_v1()此函數會產生v1版本的UUID。演算法使用了電腦的MAC地址和時間戳記。 說明 該UUID會泄露電腦標識和產生時間,不適合安全性要求較高的應用。uuid_generate_v1mc()此函數會產生一個v1版本的UUID。和 uuid_generate_v1()的區別在於uuid_generate_v1mc()使用的是一個隨機多播MAC地址,uuid_generate_v1()使用的是電腦的真實的MAC地址。uuid_generate_v3(namespace uuid, name text)此函數會產生一個v3版本的UUID。這個函數會使用指定輸入名稱 name在指定的命名空間namespace中產生。- 指定的命名空間是調用下表中的函數
uuid_ns_*()返回的常量。 - 參數
name是一個指定命名空間namespace中的標識符。
SELECT uuid_generate_v3(uuid_ns_url(), 'example.com');name會使用MD5演算法進行雜湊,從產生的UUID中不能反向獲得明文。利用這個方法產生的UUID不需要隨機演算法且不依賴任何運行相關的環境因素,產生過程是可重複的。uuid_generate_v4()此函數會產生一個v4版本的UUID。演算法完全依靠隨機數。 uuid_generate_v5(namespace uuid, name text)此函數會產生一個v5版本的UUID。工作過程類似於v3版本的UUID,但是v5版本使用的是SHA-1的雜湊演算法,因為SHA-1演算法被認為比MD5演算法更安全,建議盡量使用v5版本。 - 指定的命名空間是調用下表中的函數
- 返回UUID常量的函數
函數 描述 uuid_nil()代表nil的UUID常量,此處不應該看作一個真正的UUID。 uuid_ns_dns()代表DNS命令空間的UUID常量。 uuid_ns_url()代表URL命名空間的UUID常量。 uuid_ns_oid()代表ISO物件識別碼(OID)命名空間的UUID常量。 說明 此處OID是ASN.1的OID,和PostgreSQL用的OID沒有關係。uuid_ns_x500()代表X.500識別名字(DN)命名空間的UUID常量。
樣本
- 產生一個V1版本的UUID。
SELECT uuid_generate_v1();返回資訊如下:
uuid_generate_v1 -------------------------------------- a6808efc-13c8-11ed-ad4f-00163e010e52 (1 row) - 產生一個V3版本的UUID。
SELECT uuid_generate_v3(uuid_ns_url(), 'example.com');返回資訊如下:
uuid_generate_v3 -------------------------------------- a0473a67-27a1-3c05-a2d1-5c134639347f (1 row) - 產生一個V4版本的UUID。
SELECT uuid_generate_v4();返回資訊如下:
uuid_generate_v4 -------------------------------------- 170d0eb6-520a-4f93-a1b3-89458fffb54c (1 row) - 產生一個V5版本的UUID
SELECT uuid_generate_v5(uuid_ns_url(), 'example.com');返回資訊如下:
uuid_generate_v5 -------------------------------------- a5cf6e8e-4cfa-5f31-a804-6de6d1245e26 (1 row)