近期对股票行情数据库进行升级,以便利用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 成功,整个过程耗时又烦琐,现把这一过程做个简单的记录,供日后参考和学习者交流。

遇见 TimescaleDB
TimescaleDB是专门处理时序数据的数据库扩展工具,与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文件进行安装。
- 下载TimescaleDB 2.12.2, 如下图;

- 安装OpenSSL 3.x , 并将该工具程序的目录信息保存在windows系统的环境变量中,这一步很重要!!!下图为官网给出的安装TimescaleDB的先决条件:安装Timescale 2.11.2及以上版本,必须确保已安装了OpenSSL 3.x;相比更老的版本,必须安装OpenSSL 1.1.1。

接下来,把OpenSSL的路径保存到windows系统的环境变量中,如下图:

- 安装timescaleDB 2.12.2。解压下载的工具包后,包含文件如下图,

(注意以上截图中缺失 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秒,

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/73779
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!