如何在PostgreSQL 数据库上安装 TimescaleDB?

如何在PostgreSQL 数据库上安装 TimescaleDB?

首页模拟经营纽约出租车模拟器更新时间:2024-05-09

本文简述本地 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 成功,整个过程耗时又烦琐,现把这一过程做个简单的记录,供日后参考和学习者交流。

遇见 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文件进行安装。

  1. 下载TimescaleDB 2.12.2, 如下图;

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

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

  1. 安装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秒,

(本文完)

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved