本文简述本地 postgresql 15上安装时序数据库 TimescaleDB 2.12.2的过程及其报错处理。
问题近期对股票行情数据库进行升级,以便利用TimescaleDB强大的实时数据处理能力更快更好的处理行情实时数据。本想升级到当前最新版PostgreSQL 16,并安装当前最新版的 TimescaleDB 2.14.2,但是在PostgreSQL16 和 TimescaleDB 2.14.2正常安装后,在指定的数据库上创建扩展timescaledb,系统给出报错信息: ”C:/Program Files/PostgreSQL/16/lib/timescaledb-2.14.2.dll: The specified module could not be found.”。
查看TimescaleDB官网信息了解到,TimescaleDB 2.14.2 可以安装在PostgreSQL 15和16版上,但两种尝试都失败。查看网上相关的中英文信息,也未能解决。尝试PostgreSQL 15 上安装TimescaleDB 2.10,也出现同样的问题;最后尝试在PostgreSQL 15上安装TimescaleDB 2.12.2 成功,整个过程耗时又烦琐,现把这一过程做个简单的记录,供日后参考和学习者交流。
遇见 TimescaleDBTimescaleDB是专门处理时序数据的数据库扩展工具,与PostgreSQL数据库适配,面世大概有六七年,现在已发展成为一款支持云数据库的分布式数据处理工具,处理能力达到每秒千万条数据。第一次接触这个工具还是它的TimescaleDB 0.5版,先要用CMake进行代码转换,然后在Visual Studio中进行编译再安装,转换和编译都需要postgresql的源码支持。当时在PostgreSQL 9.6上成功安装了TimescaleDB 0.5。现在官方提供了两种安装方式,一种用源码安装,还是先转换再编译,然后安装;另一种是官方提供了编译好的DLL文件和安装所需要的SQL代码,后一种方法更方便。
但前面出现的PostgreSQL和TimescaleDB版本适配的问题,个人能力和精力所限,不明就里也不纠缠,PostgreSQL 15.6 和 TimescaleDB 2.12.2 能正确安装,能用就行。
安装步骤官网提供的PostgreSQL 和 TimescaleDB 版本适配信息,如下图:
这里仅介绍下载官方编译好的TimescaleDB的DLL文件和SQL文件进行安装。
接下来,把OpenSSL的路径保存到windows系统的环境变量中,如下图:
(注意以上截图中缺失 timescaledb.control 文件)
以管理员身份运行setup.exe, 如下图:
这里要注意,
(1)“C:\Program Files\PostgreSQL\15\bin\pg_config.exe” 的路径信息要添加到windows系统的环境变量中;
(2)出现提示信息:Do you want to run timescaledb-tune.exe now? [(y)es / (n)o]: y
Please enter the path to your postgresql.conf:
C:\Program Files\PostgreSQL\15\data (人工输入 postgresql.conf 文件的路径信息)
== Using postgresql.conf at this path:
C:\Program Files\PostgreSQL\15\data\postgresql.conf
后续都选择‘Y’ 即可,完成安装如下图:
注意:安装程序在运行过程中会自动把DLL文件、SQL文件和timescaledb.control文件负值到相关的目录,无需人工操作。
在postgreSQL 15 数据库上创建timescaleDB在SQL shell命令行窗口中操作,如下图:
上图中,命令行‘ \c tutorial’ ,建立tutorial数据库连接; ‘create extension timescaledb;’ 创建timescaledb扩展库,出现图中显示信息即表示创建成功,在tutorial数据库中有下图所示的信息:
官方提供的时序数据库学习示例之一:NYC_data 纽约出租车数据信息先安装nyc_data数据库,再给该数据库创建timescaledb。官网也提供该数据的下载链接,为文本格式,如有需要数据库,可在评论区留言索取,该数据库备份文件400 M。
NYC_data查询语句示例,可以看出查询速度大幅提高以下查询代码示例均来自timescaledb官网,如下图:
该数据库中出租车出行记录表rides,共有10906858条记录。
示例1,20160108之前纽约每天有多少车辆出行?
SELECT date_trunc('day', pickup_datetime) as day,
COUNT(*) FROM rides
WHERE pickup_datetime < '2016-01-08'
GROUP BY day
ORDER BY day;
(注:该数据库只包含20160101后的数据数据)
以上查询语句运行结果如下图,查询耗时1.87秒:
示例2:2016年第一周的每一天,纽约出租车每单服务的平均资费是多少?
SELECT date_trunc('day', pickup_datetime)
AS day, AVG(fare_amount)
FROM rides
WHERE pickup_datetime < '2016-01-08'
GROUP BY day
ORDER BY day;
查询结果如下图,耗时13.8秒:
示例3:2016年第一周,纽约出租车每种费率的出行次数是多少?
SELECT rate_code, COUNT(vendor_id) AS num_trips
FROM rides
WHERE pickup_datetime < '2016-01-08'
GROUP BY rate_code
ORDER BY rate_code;
查询结果如下图,共耗时1.2秒,
示例3:2016年第一周,纽约出租车往返飞机场的服务资费类型是哪几种?
SELECT rates.description,
COUNT(vendor_id) AS num_trips,
AVG(dropoff_datetime - pickup_datetime) AS avg_trip_duration,
AVG(total_amount) AS avg_total,
AVG(passenger_count) AS avg_passengers
FROM rides
JOIN rates ON rides.rate_code = rates.rate_code
WHERE rides.rate_code IN (2,3) AND pickup_datetime < '2016-01-08'
GROUP BY rates.description
ORDER BY rates.description;
查询结果如下图,耗时0.28秒,
示例4:2016年元旦这一天,纽约出租车每2小时服务多少人次?
SELECT time_bucket('120 minute', pickup_datetime) AS thirty_min, count(*)
FROM rides
WHERE pickup_datetime < '2016-01-02 00:00'
GROUP BY thirty_min
ORDER BY thirty_min;
查询结果如下图,耗时0.275秒,
(本文完)
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved