一、背景:
postgresql中需要提高全文检索的查询性能,现引入postgresql的扩展pgroonga。客户的postgresql是离线docker安装的postgis
二、打包pgroonga依赖包
首先需要找一台能联网的服务器,部署与客户环境一致的docker
1、进入容器,配置APT源
# 启动一个与生产环境相同版本的临时容器(例如 Debian Bookworm)
docker run -it --name temp-pg postgres/postgis:15-master /bin/bash
# 安装必要工具
apt-get update && apt-get install -y wget gnupg
# 添加 Apache Arrow 源
. /etc/os-release && \
wget https://apache.jfrog.io/artifactory/arrow/debian/apache-arrow-apt-source-latest-$(echo $VERSION_CODENAME).deb && \
dpkg -i apache-arrow-apt-source-latest-$(echo $VERSION_CODENAME).deb
# 添加 Groonga 源
. /etc/os-release && \
wget https://packages.groonga.org/debian/groonga-apt-source-latest-$(echo $VERSION_CODENAME).deb && \
dpkg -i groonga-apt-source-latest-$(echo $VERSION_CODENAME).deb
# 安装下载的源
apt install -y -V ./*deb
# 更新软件源
apt-get update
2、下载pgroonga及依赖包
apt-get download postgresql-15-pgdg-pgroonga \
libarrow1100 \
libarrow1600 \
libgroonga0 \
libmsgpackc2 \
libprotobuf23 \
libre2-9 \
libsgutils2-2 \
libutf8proc2
三、离线安装pgroonga依赖包
1、查看离线容器的docker服务名
docker ps
2、查看容器的映射文件地址
docker inspect japan-postgres
Mounts中Source对应容器外地址,Destination对应容器内地址
3、把所有依赖包move到Source位置,进入容器,cd到Destination
docker exec -it japan-postgres /bin/bash
cd /var/lib/postgis/data/pgroonga-deps
4、安装pgroonga所有依赖包
dpkg -i *.deb || apt-get -f install -y

5、进入postgresql,创建扩展
su postgres
psql
执行sql
CREATE EXTENSION pgroonga;
SELECT * FROM pg_extension WHERE extname = 'pgroonga';
四、验证效果
1、创建索引
CREATE INDEX idx_osm_buildings_name_pgroonga ON osm_buildings USING pgroonga(name);
2、对比效果
创建pgroonga索引的表做模糊查询,耗时<300ms,未创建索引的表耗时约为3s
#创建了pgrootgna索引的表查询sql
SELECT * FROM "import".osm_buildings where name like '%居酒屋%';
# 未创建pgrootgna索引的表查询
SELECT * FROM "import".osm_buildings_copy1 where name like '%居酒屋%';