TimescaleDB

TimescaleDB 是一个开源数据库,旨在使 SQL 可扩展以处理时间序列数据。它从 PostgreSQL 中构建并打包为 PostgreSQL 扩展,保留了对 SQL 的完全支持。

目前官方安装文档提供了 6 种安装方式。安装文档

本文是在基于 Rocky Linux 系统中的 PostgreSQL 数据库进行安装。PostgreSQL 的版本为 17。

⚠️注意:在 Redhat Linux 系的 8 版本或者更高的版本需要关闭内置的 PostgreSQL 模块。才可以进行安装 PostgreSQL 数据库。本文这里仅记录 TimescaleDB 的安装配置,不包含 PostgreSQL 数据库的安装。

1
2
# 关闭内置的 PostgreSQL 模块
dnf -qy module disable postgresql

首先,我们需要准备安装时序数据库的 Yum 源。

1
2
3
4
5
6
7
8
9
10
11
12
sudo tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL

更新的仓库缓存,并执行安装命令。

1
2
yum makecache
yum install timescaledb-2-postgresql-17

安装完毕后,运行下面的命令对 PG 数据库进行参数调整。如果你很了解数据库,那么看好提示选择 yes 或者 no。

1
timescaledb-tune --pg-config=/usr/pgsql-17/bin/pg_config

登录数据库。⚠️你需要使用对应的账户登录你想使用 TimescaleDB 的数据库中。

1
psql -h localhost -p 5432 -U postgres

添加 TimescaleDB 扩展到你的数据库实例中。

⚠️TimescaleDB 是一个 PostgreSQL 扩展,扩展的安装和作用范围是数据库级别的,而不是实例级别的。因此,如果你有多个数据库,并且希望在每个数据库中使用 TimescaleDB,你需要在每个数据库中分别执行这个命令。

1
CREATE EXTENSION IF NOT EXISTS timescaledb;

使用 \dx 来查看扩展是否创建成功。

1
2
3
4
5
List of installed extensions
Name | Version | Schema | Description
-------------+---------+------------+---------------------------------------------------------------------------------------
plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language
timescaledb | 2.17.2 | public | Enables scalable inserts and complex queries for time-series data (Community Edition)

最后,我们来创建超表来使用这个扩展。

首先我们需要创建一个包含时间字段的普通数据表。

1
2
3
4
5
6
7
CREATE TABLE conditions (
time TIMESTAMPTZ NOT NULL,
location TEXT NOT NULL,
device TEXT NOT NULL,
temperature DOUBLE PRECISION NULL,
humidity DOUBLE PRECISION NULL
);

使用下面的 SQL 来转化这个普通的数据表。

1
SELECT create_hypertable('表名', by_range('时间字段'));

⚠️如果你的数据表把 ID 字段设置为了主键。那么你想使用的时间字段也必须设置为主键。否则转换会失败。

⚠️如果执行转化命令执行后提示警告,例如字段类型警告等。必须解决之后才可以转换。虽然提示的信息不是错误,是一个警告

如果你想删除一个超表。就像删除普通的数据表一样,直接删除即可。

1
DROP TABLE <TABLE_NAME>;

TimescaleDB 的数据表也支持各种配置。

参考官网文档:https://docs.timescale.com/getting-started/latest/