TimescaleDB + PostGIS 环境搭建

张开发
2026/4/15 13:26:57 15 分钟阅读

分享文章

TimescaleDB + PostGIS 环境搭建
TimescaleDB PostGIS 环境搭建一、 核心组件状态与版本选型1. 镜像选择误区已废弃镜像timescale/timescaledb-postgis(已停止更新 5 年严禁使用)。官方推荐timescale/timescaledb-ha。HA 含义High Availability高可用。内置组件PostgreSQL、TimescaleDB、PostGIS、Toolkit、Patroni (HA 工具)、Prometheus 监控插件。2. 标签 (Tag) 命名规则拆解镜像标签采用“积木式”命名例如pg16-ts2.26-allpg16PostgreSQL 16目前生产环境的主流首选性能与稳定性平衡最好。ts2.26明确锁定 TimescaleDB 版本避免latest导致的生产环境版本漂移。-all关键后缀代表包含 PostGIS 和所有扩展工具。-oss开源协议版不含自动压缩和持续聚合功能建议慎选。二、 Docker 部署配置1. 核心docker-compose.ymlservices:timescaledb:image:timescale/timescaledb-ha:pg16-ts2.26-allcontainer_name:timescaledb-serverrestart:unless-stoppedenvironment:-POSTGRES_PASSWORDyour_password# 超级用户密码-POSTGRES_DBtsdb# 初始业务数据库-PGDATA/home/postgres/pgdata/data# 容器内固定数据路径ports:-5432:5432volumes:-./ts_data:/home/postgres/pgdatashm_size:1gb# 共享内存建议设为宿主机内存的 25%三、 数据库初始化与表操作1. 启用核心扩展连接到tsdb库后首先需手动激活插件CREATEEXTENSIONIFNOTEXISTStimescaledbCASCADE;CREATEEXTENSIONIFNOTEXISTSpostgis;注看到spatial_ref_sys系统表出现即代表 PostGIS 安装成功。2. 测试创建时序地理空间表 (Hypertable)-- 1. 创建普通表CREATETABLEsensor_data(timeTIMESTAMPTZNOTNULL,-- 必须包含时间戳device_idTEXTNOTNULL,locationGEOMETRY(POINT,4326),temperature FLOAT8);-- 2. 转换为 Hypertable (按时间自动分区)SELECTcreate_hypertable(sensor_data,time);-- 3. 地理索引CREATEINDEXidx_sensor_locationONsensor_dataUSINGGIST(location);3. 数据插入示例INSERTINTOsensor_data(time,device_id,location,temperature)VALUES(NOW(),sensor_001,ST_GeomFromText(POINT(116.39 39.90),4326),25.5);四、 进阶优化数据压缩数据压缩配置 (Compression)压缩能节省 90% 以上的空间并将历史数据从“行存”转为“列存”。第一步开启压缩功能(按设备 ID 分组时间倒序排序)ALTERTABLEsensor_dataSET(timescaledb.compress,timescaledb.compress_segmentbydevice_id,timescaledb.compress_orderbytime DESC);第二步设置自动压缩策略(例如压缩 7 天前的数据)SELECTadd_compression_policy(sensor_data,INTERVAL7 days);查看效果SELECT*FROMchunk_compression_stats(sensor_data);

更多文章