PostgreSQL 扩展:uuid-ossp 简介

Abstract shapes over a dark background.

作者:Timescale 团队

The uuid-ossp 扩展对于使用 PostgreSQL 的开发者来说是一个强大的工具。此扩展根据开放软件基金会 (OSF) 的分布式计算环境 (DCE) 标准生成通用唯一标识符 (UUID)。

UUID 是 128 位值,在全球范围内是唯一的。无论您在何处生成 UUID,它都将始终不同于任何时候在任何其他地方生成的 UUID。

安装 uuid-ossp 扩展

要安装 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-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 数据类型.

uuid-ossp 函数

PostgreSQL 中的 uuid-ossp 模块提供各种函数来生成通用唯一标识符,以及返回特定 UUID 值的常量。以下是来自 uuid-ossp 模块的一些常见函数和常量及其用法的概述

用于生成 UUID 的函数

函数

描述

uuid_generate_v1()

根据主机的 MAC 地址和当前时间生成 UUID

uuid_generate_v4()

生成随机 UUID

uuid_generate_v3(uuid, name)

使用命名空间 UUID 和名称的 MD5 哈希生成 UUID

uuid_generate_v5(uuid, name)

使用命名空间 UUID 和名称的 SHA-1 哈希生成 UUID

返回 UUID 值的常量

常量

描述

uuid_nil()

返回空 UUID:'00000000-0000-0000-0000-000000000000'

uuid_ns_dns()

返回 DNS 命名空间的 UUID

uuid_ns_url()

返回 URL 命名空间的 UUID

uuid_ns_oid()

返回 OID 命名空间的 UUID

uuid_ns_x500()

返回 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,从而提高分布式数据库中数据的唯一性和完整性。

uuid-ossp 扩展的时间序列用例

The uuid-ossp 扩展在时间序列数据场景中尤其有用。例如,在从多个设备同时收集数据的物联网应用程序中,可以为每个数据点分配唯一的 UUID。这确保了可以唯一标识每个数据点,无论何时何地收集数据。

将 uuid-ossp 扩展与 Timescale 和时间序列数据一起使用

如果您使用的是 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 用例的性能?查看我们的入门指南!