在PostgreSQL里安装gevel拓展
gevel是一个查看GiST以及SP-GiST索引内部结构的一个插件, gevel官网的教程写的不是非常清楚,这里写一下我安装的过程。
下面的安装过程基于干净的Ubuntu20.04系统,其它linux系统安装的步骤应该也大同小异。
从源码安装Postgres
首先更新一下系统中的软件包
1 | apt update -y |
然后下载postgres的最新代码
1 | git clone https://github.com/postgres/postgres.git |
安装编译代码所需要的依赖,目前主要是下面几个
1 | sudo apt install -y zlib1g-dev libreadline-dev gcc libc6-dev |
依赖安装成功以后,到postgres源码目录中运行编译的命令
1 | ./configure |
编译contrib文件夹
1 | cd contrib |
启动Postgres
用root权限创建用户
1 | adduser postgres |
然后创建数据库文件夹
1 | mkdir -p /usr/local/pgsql/data |
切换到postgres用户,并初始化数据库文件夹以及启动数据库
1 | su postgres |
看到下面的输出说明启动成功
1 | waiting for server to start.... done |
创建测试数据库
切换回root用户,连接数据库
1 | export PATH=$PATH:/usr/local/pgsql/bin #这一步可以配置到~/.bashrc来使其永久生效 |
创建测试数据库
1 | postgres=# create database testdb; |
编译安装gevel
回到postgres源码的/contrib目录下,下载gevel
1 | git clone git://sigaev.ru/gevel |
进入到gevel并编译安装
1 | cd gevel |
这时候编译会报错
报错信息中也告诉应该怎么修改了,根据错误信息来修改
主要修改的地方是 gevel.c的1660行和2004行,都是将BTreeInnerTupleGetDownLink修改为BTreeTupleGetDownLink
修改完后重新编译和安装gevel
1 | make USE_PGXS=1 |
这时候仍然会有出错信息,如下图所示
无视此信息,将此目录下编译出的的gevel.so复制到/usr/local/pgsql/lib目录下
1 | cp gevel.so /usr/local/pgsql/lib |
然后运行下面命令在testdb数据库中创建相应的函数
1 | psql -U postgres -d testdb < gevel.sql |
看到下面的输出,说明安装成功了
1 | SET |
测试gevel
最后我们来测试一下gevel是否生效
连接到testdb数据库,运行下面命令创建表,再插入测试数据后建立gist索引
1 | create table reservations(during tsrange); |
然后查看索引的内部结构
1 | select level, a from gist_print('reservations_during_idx') as t(level int, valid bool, a tsrange); |
可以看到索引的内部信息了
原文作者: 李小飞
原文链接: https://www.lixf.cc/2022/01/08/install-gevel-in-postgres/
版权声明: 转载请注明出处(必须保留作者署名及链接)