数据库模式

PostgreSQL 扩展:hstore

​hstore 是强大的、灵活的 PostgreSQL 扩展,它允许开发人员使用数据库作为无模式 NoSQL 存储,同时保留传统关系型数据库的优势。

它提供在单个 PostgreSQL 值中存储键值对的功能。这对于存储半结构化数据和属性数量 (键) 可能因记录而异的数据集特别有用。

​安装 hstore 扩展

​在使用 hstore 扩展之前,需要安装它。以下是如何操作

1. 首先,连接到您想要安装 hstore 扩展的 PostgreSQL 数据库。可以使用 psql 命令行客户端或 pgAdmin 之类的图形客户端。在 Timescale 上,您可以通过访问 操作 > 扩展 来查找可用的扩展,它也会提供安装说明。​

2. 连接后,运行以下 SQL 命令

CREATE EXTENSION IF NOT EXISTS hstore;​

如果 hstore 扩展尚未安装,则此命令将安装它。

使用 hstore 扩展

要使用 hstore 扩展,您需要在表中创建一个类型为 hstore 的列。以下是一个示例

CREATE TABLE products (
    id serial PRIMARY KEY,
    attributes hstore
);

在这个例子中,attributes 列可以存储任意数量的键值对。您可以像这样将数据插入 attributes

INSERT INTO products (attributes) VALUES ('"color"=>"blue", "size"=>"XL"');

您还可以使用 hstore 扩展提供的各种运算符和函数来查询 hstore 列中的数据。例如,您可以找到所有具有 "color" 键的产品,如下所示

SELECT * FROM products WHERE attributes ? 'color';

​时间序列使用 hstore 的用例​

在数据结构可能随时间变化的时间序列数据中,hstore 扩展特别有用。例如,您可能正在跟踪一组机器的各种指标,并且随着您向机器添加或删除传感器,指标集也会发生变化。​

使用 hstore,您可以轻松添加或删除属性,而无需更改数据库的模式。这使其非常适合时间序列数据。

将 hstore 与 Timescale 和时间序列数据一起使用

​Timescale 是一个构建在 PostgreSQL 之上的时间序列数据库。它提供用于处理时间序列数据的先进功能,例如自动分区和聚合。​

您可以将 hstore 扩展与 Timescale 一起使用,以存储具有灵活模式的时间序列数据。与常规的 PostgreSQL 数据库一样,您可以创建一个包含 hstore 列的表,并将您的时间序列数据插入其中。

以下是一个示例

CREATE TABLE machine_metrics (
    time TIMESTAMPTZ NOT NULL,
    machine_id int NOT NULL,
    metrics hstore,
    PRIMARY KEY(time, machine_id)
);

在这个例子中,metrics 列可以存储任意数量的键值对,允许您根据需要轻松添加或删除指标。

​hstore 也适用于超表,这使您能够获得 TimescaleDB 的所有功能以及 hstore 的灵活性。例如,您可以通过运行以下命令将上面的 machine_metrics 变成超表

SELECT create_hypertable('machine_metrics','time');

了解更多

要详细了解 Timescale 和超表,请 查看我们的入门指南