PostgreSQL 教程: UUID 数据类型

八月 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;

PostgreSQL UUID example

正如您所看到的,contact_id列已由uuid_generate_v4()函数生成的 UUID 值填充。

在本教程中,您学习了如何使用 PostgreSQL 的 UUID 数据类型,以及如何使用uuid-ossp模块生成 UUID 值。