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;
输出: