📜  PostgreSQL – UUID 数据类型

📅  最后修改于: 2022-05-13 01:57:15.950000             🧑  作者: Mango

PostgreSQL – UUID 数据类型

UUID 是 RFC 4122 定义的 Universal Unique Identifier 的缩写,大小为 128 位。它是使用始终生成唯一值的内部算法创建的。

PostgreSQL 有自己的 UUID 数据类型并提供模块来生成它们。 UUID 通常用于分布式系统,因为它比 SERIAL 数据类型更好地保证了奇点,后者仅在单个数据库中生成奇异值。
PostgreSQL 使您能够存储和比较 UUID 值,但它的核心没有包含用于生成 UUID 值的函数。相反,它依赖于提供某些算法来生成 UUID 的第三方模块。例如, uuid-ossp模块提供了一些方便的函数,用于执行生成 UUID 的标准算法。

要安装“uuid-ossp”扩展,请使用以下命令:

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

为了根据计算机的 MAC 地址、当前时间戳和随机值的混合生成 UUID 值,可以使用uuid_generate_v1()函数,如下所示:

SELECT uuid_generate_v1();

这将导致类似于下图的输出:



为了仅基于随机数生成 UUID 值,可以使用uuid_generate_v4()函数,如下所示:

SELECT uuid_generate_v4();

这将导致类似于下图的输出:

例子:
在这个例子中,我们将创建一个主键是 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
    (
        'Raju',
        'Kumar',
        'rajukumar@gmail.com',
        '408-237-2345'
    ),
    (
        'Nikhil',
        'Aggarwal',
        'nikhilaggarwal@gmail.com',
        '408-237-2344'
    ),
    (
        'Anshul',
        'Aggarwal',
        'anagg@hotmail.com',
        '408-237-2343'
    );

现在我们使用以下命令查询联系人表中的所有行:

SELECT
    *
FROM
    contacts;

输出: