0Pricing
SQL Academy · 课时

TimescaleDB 超表

将 Postgres 表转换为 TimescaleDB 超表,并按分块间隔自动进行时间分区

TimescaleDB 超表 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

什么是 TimescaleDB

TimescaleDB 是为时间序列数据构建的 PostgreSQL 扩展。它增加了自动时间分区、压缩、保留策略和连续聚合功能。它既可以单独使用,也可以与普通 PostgreSQL 配合使用。

超表

逻辑上是一张表,但在物理上按时间拆分为多个“数据块”:

CREATE EXTENSION IF NOT EXISTS timescaledb;

CREATE TABLE metrics (
  ts TIMESTAMPTZ NOT NULL,
  device_id BIGINT NOT NULL,
  value DOUBLE PRECISION
);

SELECT create_hypertable('metrics', 'ts');
-- metrics is now a hypertable, chunks created automatically.

数据块时间间隔

默认数据块大小为 7 天。请根据数据产生速度进行调优(数据产生速度高时使用更小的数据块):

SELECT create_hypertable('metrics', 'ts', chunk_time_interval => INTERVAL '1 day');
-- One chunk per day, smaller and faster to drop.

插入数据

直接执行普通 INSERT 即可,TimescaleDB 会将行路由到正确的数据块:

INSERT INTO metrics (ts, device_id, value)
VALUES (NOW(), 1, 42.5);

查询超表

它看起来就像普通表。对于有时间范围限制的查询,规划器会裁剪不相关的数据块:

SELECT * FROM metrics
WHERE ts >= NOW() - INTERVAL '7 days'
ORDER BY ts DESC LIMIT 100;
-- Only the relevant chunks are read.

time_bucket:更智能的 date_trunc

TimescaleDB 提供的分组辅助函数:

SELECT time_bucket('1 hour', ts) AS hour,
       AVG(value) AS avg_value
FROM metrics
WHERE device_id = 42
  AND ts >= NOW() - INTERVAL '24 hours'
GROUP BY hour
ORDER BY hour;

多列分区

对于多租户工作负载,还可以按 device_id 进行分区:

SELECT create_hypertable('metrics', 'ts', 'device_id', 4);
-- Hash-partitions device_id into 4 space partitions per time chunk.

同时使用两个过滤条件进行查询

同时过滤两个分区维度时,性能最佳:

SELECT * FROM metrics
WHERE device_id = 42
  AND ts >= NOW() - INTERVAL '7 days';
-- Prunes by both time and space.

超表上的索引

索引会传播到每个数据块:

CREATE INDEX metrics_device_idx ON metrics (device_id, ts DESC);
-- Composite index ideal for 'recent data for one device' queries.

更新超表

UPDATE 和 DELETE 可以正常工作,但在时间序列场景中应尽量少用。旧数据通常只追加且不可变。

从普通表迁移

现有表可以转换为超表:

SELECT create_hypertable('metrics', 'ts', migrate_data => true);

总结

超表 = PostgreSQL 的自动时间分区。

  • 一张逻辑表,多个物理数据块
  • create_hypertable + chunk_time_interval
  • 使用 time_bucket 执行分桶聚合
  • 索引会传播到所有数据块

快速检查

您正在以每秒 100,000 行的速度写入 IoT 指标。为什么要将该表转换为 TimescaleDB 超表?

常见问题解答

「TimescaleDB 超表」课时是免费的吗?

是的 — 「TimescaleDB 超表」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「TimescaleDB 超表」这节课中我会学到什么?

将 Postgres 表转换为 TimescaleDB 超表,并按分块间隔自动进行时间分区 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「TimescaleDB 超表」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. TimescaleDB 超表
  2. 连续聚合
  3. 压缩与保留策略
  4. 时间序列索引选择
← 返回 SQL Academy