timescaledb
时序数据库扩展插件
仓库
timescale/timescaledb
https://github.com/timescale/timescaledb
源码
timescaledb-2.28.3.tar.gz
timescaledb-2.28.3.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
timescaledb | 2.28.3 | TIME | Timescale | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 1000 | timescaledb | 否 | 是 | 是 | 是 | 是 | 否 | timescaledb_information |
| 相关扩展 | timescaledb_toolkit timeseries pg_cron pg_partman periods temporal_tables emaj pg_task |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 2.28.3 | 1817161514 | timescaledb | - |
| RPM | PIGSTY | 2.28.3 | 1817161514 | timescaledb-tsl_$v | - |
| DEB | PIGSTY | 2.28.3 | 1817161514 | postgresql-$v-timescaledb-tsl | - |
构建
您可以使用 pig build 命令构建 timescaledb 扩展的 RPM / DEB 包:
pig build pkg timescaledb # 构建 RPM / DEB 包
安装
您可以直接安装 timescaledb 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install timescaledb; # 当前活跃 PG 版本安装
pig ext install -y timescaledb -v 18 # PG 18
pig ext install -y timescaledb -v 17 # PG 17
pig ext install -y timescaledb -v 16 # PG 16
pig ext install -y timescaledb -v 15 # PG 15
dnf install -y timescaledb-tsl_18 # PG 18
dnf install -y timescaledb-tsl_17 # PG 17
dnf install -y timescaledb-tsl_16 # PG 16
dnf install -y timescaledb-tsl_15 # PG 15
apt install -y postgresql-18-timescaledb-tsl # PG 18
apt install -y postgresql-17-timescaledb-tsl # PG 17
apt install -y postgresql-16-timescaledb-tsl # PG 16
apt install -y postgresql-15-timescaledb-tsl # PG 15
预加载配置:
shared_preload_libraries = 'timescaledb';
创建扩展:
CREATE EXTENSION timescaledb;
用法
来源:
- TimescaleDB v2.28.3 README
- TimescaleDB 2.28.3 发行版
- 2.28.3 变更日志
- CREATE TABLE API
- create_hypertable() API
- 连续聚合API
- add_columnstore_policy() API
- TimescaleDB GUCs
timescaledb 是一个用于时间序列和事件分析的PostgreSQL扩展。当前文档强调了 CREATE TABLE ... WITH (tsdb.hypertable)、连续聚合、自动化任务以及将数据块移入列存储。
超表
CREATE EXTENSION timescaledb;
CREATE TABLE ts_test (
ts timestamptz NOT NULL,
id bigint,
v integer
) WITH (
tsdb.hypertable,
tsdb.orderby = 'ts DESC'
);
要转换现有的PostgreSQL表,请使用通用超表API:
CREATE TABLE ts_existing (
ts timestamptz NOT NULL,
id bigint,
v integer
);
SELECT create_hypertable('ts_existing', by_range('ts'));
CREATE TABLE ... WITH (tsdb.hypertable)从TimescaleDB 2.20.0版本开始被文档化,是创建新超表的最佳实践路径。- 对于TimescaleDB 2.23.0及更高版本,第一个
TIMESTAMP或TIMESTAMPTZ列将自动选择为分区列,除非多个候选者使选择变得模糊。 create_hypertable()仍然可以用于转换现有表。
连续聚合和任务
CREATE MATERIALIZED VIEW ts_hourly
WITH (timescaledb.continuous) AS
SELECT time_bucket('1 hour', ts) AS bucket,
count(*) AS cnt,
avg(v) AS avg_v
FROM ts_test
GROUP BY bucket;
SELECT add_continuous_aggregate_policy(
'ts_hourly',
start_offset => INTERVAL '3 hours',
end_offset => INTERVAL '1 hour',
schedule_interval => INTERVAL '1 hour'
);
SELECT add_job('user_defined_action', '1h');
- 连续聚合需要在超表的时间维度上使用
time_bucket(...)。 - 连续聚合的
WITH子句支持timescaledb.materialized_only;当前API默认值为TRUE,因此除非另行配置,否则实时聚合不会启用。 - TimescaleDB 2.28.0允许手动调用
refresh_continuous_aggregate()分批增量执行。使用buckets_per_batch、max_batches_per_execution和refresh_newest_first来将大型手动刷新拆分为较小的工作单元。 - TimescaleDB 2.28.0还允许通过
ALTER MATERIALIZED VIEW ... ADD COLUMN ... GENERATED ALWAYS AS (...) STORED向现有连续聚合添加新的生成聚合列;现有行在刷新之前为NULL。
列存储
CREATE TABLE crypto_ticks (
"time" timestamptz,
symbol text,
price double precision,
day_volume numeric
) WITH (
tsdb.hypertable,
tsdb.segmentby = 'symbol',
tsdb.orderby = 'time DESC'
);
CALL add_columnstore_policy('crypto_ticks', after => INTERVAL '60 days');
- 除非
CREATE TABLE ... WITH (tsdb.hypertable),否则默认情况下tsdb.columnstore = false启用列存储。 add_columnstore_policy()替换了较旧的add_compression_policy()API,并需要选择after或created_before中的一个,而不是两个。
重要GUCs
SET timescaledb.enable_direct_compress_insert = on;
SET timescaledb.enable_cagg_rewrites = on;
SET timescaledb.enable_columnar_scan_filter_pushdown = on;
timescaledb.enable_direct_compress_insert 和 timescaledb.enable_direct_compress_copy 在数据导入期间启用技术预览版的直接压缩。TimescaleDB 2.27.0 添加了 timescaledb.enable_cagg_rewrites 和 timescaledb.cagg_rewrites_debug_info,并记录了 timescaledb.enable_columnar_scan_filter_pushdown 默认启用。
版本2.28.3及相关注意事项
- 使用
2.28.3而不是早期的2.28.x构建。它包含列存储中NULL处理、排序负常量和排序值、stddev/avg结果、非默认排序规则下的压缩数据DML操作、压缩竞争以及涉及数组和NULL的直接删除情况的正确性修复。 - TimescaleDB 2.28.0通过从列存储批处理元数据中推导结果而不是解压批处理来加快对压缩数据的
first(value, time)和last(value, time)聚合。 - 2.28.0中的列存储执行器可以在压缩数据上评估
CASE ... WHEN表达式,保持条件聚合和计算表达式的向量化路径。 - TimescaleDB 2.28.0移除了自适应分块,并删除了
_timescaledb_catalog.chunk_constraint,暂时用兼容视图替换。使用稳定的信息视图而不是依赖于该系统目录对象。 - 2.28.x是支持PostgreSQL 15的最后一个次要系列;计划中的下一个次要版本仅支持PostgreSQL 16、17和18。