八月 23, 2023
摘要:在本教程中,您将了解 PostgreSQL 的 UUID 数据类型,以及如何使用提供的模块生成 UUID 值。
目录
PostgreSQL UUID 类型简介
UUID 代表 RFC 4122 和其他相关标准定义的通用唯一标识符(Universal Unique Identifier)。UUID 值是由算法生成的 128 位数值,使其在使用相同算法的已知世界中是唯一的。下面显示了 UUID 值的一些示例:
40e6215d-b5c6-4896-987c-f30f3678f608
6ecd8c99-4036-403d-bf84-cf8400f67836
3f333df6-90a4-4fda-8dd3-9485d27cee36
如您所见,UUID 是由连字符分隔的 32 位十六进制数字组成的序列。
由于其唯一性特征,您经常在分布式系统中看到UUID,因为它比仅在单个数据库中生成唯一值的 SERIAL 数据类型保证了更好的唯一性。
要将 UUID 值存储在 PostgreSQL 数据库中,请使用 UUID 数据类型。
生成 UUID 值
PostgreSQL 允许您存储和比较 UUID 值,但它的核心不包含用于生成 UUID 值的函数。
相反,它依赖于提供特定算法来生成 UUID 的第三方模块。例如,uuid-ossp
模块提供了一些方便的函数来实现生成 UUID 的标准算法。
要安装uuid-ossp
模块,请使用如下CREATE EXTENSION
语句:
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
IF NOT EXISTS
子句允许您避免重新安装模块。
要根据计算机的 MAC 地址、当前时间戳和随机值的组合生成 UUID 值,请使用以下uuid_generate_v1()
函数:
SELECT uuid_generate_v1();
该函数生成以下 UUID 值:
uuid_generate_v1
--------------------------------------
0e37df36-f698-11e6-8dd4-cb9ced3df976
(1 row)
如果您想仅根据随机数生成 UUID 值,可以使用uuid_generate_v4()
函数。例如:
SELECT uuid_generate_v4();
uuid_generate_v4
--------------------------------------
a81bc81b-dead-4e5d-abff-90865d1e13b1
(1 row)
有关 UUID 生成函数的更多信息,请查看 uuid-ossp 模块文档。
创建具有 UUID 列的表
我们将创建一个表,主键为UUID 数据类型。此外,主键列的值将使用uuid_generate_v4()
函数自动生成。
首先,使用以下语句创建contacts
表:
CREATE TABLE contacts (
contact_id uuid DEFAULT uuid_generate_v4 (),
first_name VARCHAR NOT NULL,
last_name VARCHAR NOT NULL,
email VARCHAR NOT NULL,
phone VARCHAR,
PRIMARY KEY (contact_id)
);
在此语句中,contact_id
列的数据类型为UUID
。contact_id 列有一个由uuid_generate_v4()
函数提供的默认值,因此,每当您插入新行而不指定contact_id
列的值时,PostgreSQL 将调用uuid_generate_v4()
函数为其生成值。
其次,插入一些数据到contacts
表中:
INSERT INTO contacts (
first_name,
last_name,
email,
phone
)
VALUES
(
'John',
'Smith',
'john.smith@example.com',
'408-237-2345'
),
(
'Jane',
'Smith',
'jane.smith@example.com',
'408-237-2344'
),
(
'Alex',
'Smith',
'alex.smith@example.com',
'408-237-2343'
);
第三步,使用以下 SELECT 语句查询contacts
表中的所有行:
SELECT
*
FROM
contacts;
正如您所看到的,contact_id
列已由uuid_generate_v4()
函数生成的 UUID 值填充。
在本教程中,您学习了如何使用 PostgreSQL 的 UUID 数据类型,以及如何使用uuid-ossp
模块生成 UUID 值。
了解更多
PostgreSQL 教程:数据类型
PostgreSQL 文档:UUID类型