作者:Timescale 团队
The uuid-ossp
扩展对于使用 PostgreSQL 的开发者来说是一个强大的工具。此扩展根据开放软件基金会 (OSF) 的分布式计算环境 (DCE) 标准生成通用唯一标识符 (UUID)。
UUID 是 128 位值,在全球范围内是唯一的。无论您在何处生成 UUID,它都将始终不同于任何时候在任何其他地方生成的 UUID。
要安装 uuid-ossp
扩展,您需要访问 PostgreSQL 服务器以及执行 CREATE EXTENSION
命令所需的权限。请按照以下步骤操作
1. 登录到您的 PostgreSQL 服务器。
2. 在 postgresql.conf 中将其加载到 shared_preloaded_libraries 中,因为它需要额外的共享内存。如果您使用的是 Timescale,则可以跳过此步骤,因为该扩展已预加载。
3. 连接到您要安装扩展的数据库。
4. 运行以下 SQL 命令
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
如果未安装此扩展,此命令将安装 uuid-ossp
扩展。在 Timescale 上,您可以通过在服务概述中转到 操作 > 扩展
来查找可用的扩展,这也会为您提供安装说明。
安装 uuid-ossp
扩展后,您可以使用它来生成 UUID。此扩展提供多个用于生成 UUID 的函数,包括
- uuid_generate_v1()
:此函数使用当前时间和执行函数的计算机的 MAC 地址的组合生成 UUID。
- uuid_generate_v4()
:此函数生成随机 UUID。
以下是如何使用这些函数的示例
INSERT INTO my_table (id, name) VALUES (uuid_generate_v4(), 'My Name');
在此示例中,将为插入到表的每一行生成一个新的 UUID。请注意,PostgreSQL 支持用于您表的 UUID 数据类型.
PostgreSQL 中的 uuid-ossp
模块提供各种函数来生成通用唯一标识符,以及返回特定 UUID 值的常量。以下是来自 uuid-ossp
模块的一些常见函数和常量及其用法的概述
函数 | 描述 |
| 根据主机的 MAC 地址和当前时间生成 UUID |
| 生成随机 UUID |
| 使用命名空间 UUID 和名称的 MD5 哈希生成 UUID |
| 使用命名空间 UUID 和名称的 SHA-1 哈希生成 UUID |
常量 | 描述 |
| 返回空 UUID:'00000000-0000-0000-0000-000000000000' |
| 返回 DNS 命名空间的 UUID |
| 返回 URL 命名空间的 UUID |
| 返回 OID 命名空间的 UUID |
| 返回 X.500 命名空间的 UUID |
要启用和使用 uuid-ossp
函数和常量在 PostgreSQL 中,首先激活扩展
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
以下是使用 uuid_generate_v4()
函数为新记录分配唯一标识符的方法
INSERT INTO products (product_id, product_name, product_description)
VALUES (uuid_generate_v4(), 'Widget', 'A useful widget');
要使用 UUID 常量在查询中,例如将特定命名空间 UUID 分配给变量或列
SELECT uuid_ns_dns() AS dns_namespace_uuid;
此示例检索与 DNS 命名空间关联的 UUID,这在需要标准化 UUID 命名空间的应用程序中非常有用。The uuid-ossp
函数和常量提供了一个强大的工具集,用于在 PostgreSQL 中创建和管理 UUID,从而提高分布式数据库中数据的唯一性和完整性。
The uuid-ossp
扩展在时间序列数据场景中尤其有用。例如,在从多个设备同时收集数据的物联网应用程序中,可以为每个数据点分配唯一的 UUID。这确保了可以唯一标识每个数据点,无论何时何地收集数据。
如果您使用的是 Timescale,这是一个高性能时间序列 PostgreSQL++ 数据库,那么 uuid-ossp
扩展会特别有用。您可以使用 uuid-ossp
扩展为插入到 Timescale 数据库中的每个时间序列数据点生成唯一标识符。
以下是一个示例
INSERT INTO conditions (id, time, location, temperature, humidity) VALUES (uuid_generate_v4(), NOW(), 'office', 70.0, 50.0);
在此示例中,将为插入到条件表中的每一行生成一个新的 UUID。这确保了可以唯一标识每个数据点,即使多个数据点的時間和位置相同。
您是否知道 Timescale 可以显着提高许多 UUID 用例的性能?查看我们的入门指南!