提要:在本教程中,您将了解PostgreSQL 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
数据类型。
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_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', '[email protected]', '408-237-2345' ), ( 'Jane', 'Smith', '[email protected]', '408-237-2344' ), ( 'Alex', 'Smith', '[email protected]', '408-237-2343' );
最后,查询这张表的数据:
SELECT * FROM contacts;
结果如下: