提要:在本教程中,您将了解PostgreSQL UUID数据类型以及如何使用提供的模块生成UUID值。

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,因为它保证了比在单个数据库中只生成唯一值的 SERIAL 数据类型更好的唯一性。

要在 PostgreSQL 数据库里存储 UUID,需要使用 UUID 数据类型。

生成 UUID 值

PostgreSQL 允许你存储和比较 UUID 值。但在其核心,并没有包含生成 UUID 值的函数。相反,它依赖于提供特定算法来生成 UUID 的第三方模块。比如 uuid-ossp 模块提供了一些方便的函数来实现用于生成 UUID 的标准算法。

使用 CREATE EXTENSION 语句来安装 uuid-ossp 模块:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

IF NOT EXISTS 子句用于避免重复安装该模块。

uuid-ossp 模块是第三方模块,你需要手动安装。我们提供了一个视频来演示如何在 Mac、Windows 和 Linux 操作系统上安装此模块。请关注我们的微信公众号,并输入 uuid video 指令进行查看。

根据计算机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 数据类型作为主键的表。同时,主键字段的值会使用 uuid_generate_v4() 函数来自动生成。

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)
);

插入一些数据:

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
    *
FROM
    contacts;

结果如下:

uuid

上一篇:PostgreSQL TIME类型