postgresql + postgis安装

PostGIS安装

PostGIS 是一个开源数据库拓展,它为 PostgreSQL 数据库增加了对地理空间数据的支持。PostGIS 使得空间数据的存储、查询和分析变得简单高效。

PostGIS 是 Postgresql 的一个插件,本文将介绍 centos or openEuler 24.03 (LTS)平台下如何安装 PostGIS 拓展的一些步骤和注意的问题。

在安装 PostGIS 前应该先安装好 Postgresql。

版本说明:

Unbuntu Version: openEuler 24.03 (LTS)

Postgresql Version:15.6

1.安装前准备

安装 PostGIS 前读者可以先确认下正在使用的 Postgresql 版本,根据 Postgresql 的版本来确定你要安装哪个版本的 PostGIS。

PostgreSQL 与 PostGIS 对应支持关系

PostgreSQL Version PostGIS Version
11(EOL) 2.5(EOL)、3.0、3.1、3.2、3.3
12 2.5(EOL)、3.0、3.1、3.2、3.3、3.4、3.5
13 3.0、3.1、3.2、3.3、3.4、3.5
14 3.1、3.2、3.3、3.4、3.5
15 3.2、3.3、3.4、3.5
16 3.3、3.4、3.5
17 3.3、3.4、3.5

统计时间为:2024-09-04 ,其中标注为(EOL)的是官方不再支持更新的。所以最好选择较新版本的。这个列表官方可能会有变动,最新信息见参考目录的"PostGIS 版本对应关系"。

我在安装的时候,本地的 postgresql 的版本是 15.6,所以我这里选择安装 PostGIS 3.3.6。

PostGIS 还需要依赖一些库,比如:GEOSProj 、***protobuf-c
***、GDAL等,他们之间也有一些版本的依赖和匹配关系,具体关系见参考目录的"PostGIS 版本对应关系"。

除了上面三个特意标出来的依赖库,还需要依赖一些如xml2、libpq等库,但是暂时先不用管,到安装的时候会提示你缺少哪些东西,到时候再安装也不晚。

如果读者使用源码编译安装,那么 gcc、g++、make、cmake 等这些工具都需要提前装好,或者等遇到报错后再去百度就行了,这里就不浪费篇幅了。

1.安装 Geos 库

这里我选择的版本是 Geos3.8.0,下载的文件为 geos-3.8.0.tar.bz2

源码安装:

root@localhost geos-3.8.0]# tar -jxvf geos-3.8.0.tar.bz2

root@localhost geos-3.8.0]# cd geos-3.8.0

root@localhost geos-3.8.0]# ./configure --prefix=/usr/local/geos-3.8.0

//make编译

root@localhost geos-3.8.0]# make -j 4

root@localhost geos-3.8.0]# make install

也可以直接yum安装:sudo yum install libgeos-dev

2、安装sqlite

下载路径:https://www.sqlite.org/2021/sqlite-autoconf-3340100.tar.gz

root@localhost postgis\]# tar -zxvf sqlite-autoconf-3340100.tar.gz \[root@localhost postgis\]# cd sqlite-autoconf-3340100 \[root@localhost sqlite-autoconf-3340100\]# ./configure --prefix=/usr/local/sqlite //make编译 \[root@localhost sqlite-autoconf-3340100\]# make -j 4 \[root@localhost sqlite-autoconf-3340100\]# make install //替换原有的sqlite \[root@localhost sqlite-autoconf-3340100\]# mv /usr/bin/sqlite3 /usr/bin/sqlite3_old \[root@localhost sqlite-autoconf-3340100\]# ln -s /usr/local/sqlite/bin/sqlite3 /usr/bin/sqlite3 \[root@localhost sqlite-autoconf-3340100\]# sqlite3 --version 3.34.1 2021-01-20 14:10:07 10e20c0b43500cfb9bbc0eaa061c57514f715d87238f4d835880cd846b9ebd1f //暴露pkg_config,避免proj找不到sqlite \[root@localhost sqlite-autoconf-3340100\]# export PKG_CONFIG_PATH=/usr/local/sqlite/lib/pkgconfig:$PKG_CONFIG_P #### 3.安装 Proj 库(安装前需要安装sqlite) proj下载地址 [http://download.osgeo.org/proj/](http://download.osgeo.org/proj/ "http://download.osgeo.org/proj/") 这里我选择的是 Proj 6.0.0,下载的文件为 `proj-6.0.0.tar.gz`。 (下面gdal-3.3.1要求 Proj是6以上,否则会报错) 源码安装: \[root@localhost src\]# tar -zxvf proj-6.0.0tar.gz \[root@localhost src\]# cd proj-6.0.0 \[root@localhost proj-6.0.0\]# ./configure --prefix=/usr/local/proj-6.0.0 报错因为没有安装sqlite3 \>= 3.7,解决办法安装sqlite,安装了就不会报错 ![](https://i-blog.csdnimg.cn/direct/f4101ae5ea23497599880675326e406c.png) //make编译 \[root@localhost proj-6.0.0\]# make -j 4 \[root@localhost proj-6.0.0\]# make install 也可以直接apt安装:`sudo apt-get install libproj-dev` #### 4.安装 Protobuf-c 库(安装前需安装protobuf) 这里我选择的是 1.5.2,下载的文件为 `protobuf-c-1.5.2tar.gz`。 源码安装: # 解压 sudo tar zxf protobuf-c-1.5.2.tar.gz # 配置 sudo ./configure # 编译 sudo make # 安装 sudo make install sudo ./configure时报错 ![](https://i-blog.csdnimg.cn/direct/6cd16924662c42f8b8e8259d381a8cb5.png) configure: error: Package requirements (protobuf \>= 3.0.0) were not met: Package 'protobuf', required by 'virtual:world', not found 解决办法yum install -y protobuf-compiler protobuf-devel 解决后重试 > 安装 protobuf-c 的时候需要依赖一些其他的库,比如:protobuf,pkg-config等,也要先安装。具体可以看 protobuf-c 的 github仓库,这里就不多说了 也可以直接apt安装:`sudo apt-get install libprotobuf-c-dev` #### 5.安装 Gdal 库 [Gdal 官网地址](https://gdal.org/ "Gdal 官网地址") [Gdal 仓库地址](https://github.com/OSGeo/gdal/ "Gdal 仓库地址") 这里我选择的是 `gdal-3.3.1.tar.gz`。 安装 Gdal 2.4.2和3.0.0库报错,改用Gdal 3.3.1问题解决 ![](https://i-blog.csdnimg.cn/direct/4cc4526915bb4d11b92afe291fdeddb4.png) 源码安装: 下载路径:https://download.osgeo.org/gdal/3.3.1/gdal-3.3.1.tar.gz \[root@localhost src\]# tar -zxvf gdal-3.3.1.tar.gz \[root@localhost src\]# cd gdal-3.3.1 //编译指定安装路径且绑定proj \[root@localhost gdal-3.3.1\]# ./configure --prefix=/usr/local/gdal-3.3.1 --with-proj=/usr/local/proj-6.0.0 //make编译 \[root@localhost gdal-3.3.1\]# make -j 4 \[root@localhost gdal-3.3.1\]# make install 也可以直接apt安装:`sudo apt-get install libgdal-dev` #### 9或6 安装 Postgis(调到78后面,最好放到第9步) 上面的准备工作做好了,我们就可以安装 Postgis 了。当然你要是不确定哪些库你已经安装了,也可以先直接安装 Postgis 。在执行 `./configure` 的时候,如果缺少某些依赖库,它会提醒你,然后再去安装就可以了。 [PostGIS 官网](https://postgis.net/ "PostGIS 官网") 我这里使用的是 `postgis-3.3.6.tar.gz` 版本。 源码安装: # 解压 sudo tar -zxvf postgis-3.3.6.tar.gz # 进入目录 # 配置 # --with-pgconfig 要改成读者自己的 postgresql 目录下的 pg_config 文件路径。 # --with-gdalconfig 就是上面刚安装的 gdal 路径下的 gdal-config 文件路径。 sudo ./configure --with-pgconfig=/opt/pg15.6/bin/pg_config --with-gdalconfig=/usr/local/gdal-3.3.1/bin/gdal-config # 编译 sudo make # 安装 sudo make install 报错 configure: error: Package requirements (libxml-2.0) were not met: ![](https://i-blog.csdnimg.cn/direct/51f67c5fe0164a27b6f0154102a50129.png) 解决办法:yum install libxml2 libxml2-devel pkg-config 之后再执行 报错 configure: error: could not find geos-config within the current path. You may need to try re-running configure with a --with-geosconfig parameter. ![](https://i-blog.csdnimg.cn/direct/c6c40c76a3ac4bd5951ce7e37c3f5ee4.png) 添加报错参数 sudo ./configure --with-pgconfig=/opt/pg15.6/bin/pg_config --with-gdalconfig=/usr/local/gdal-3.3.1/bin/gdal-config --with-geosconfig=/usr/local/geos-3.8.0/bin/geos-config --with-projdir=/usr/local/proj-6.0.0 > 如果在 执行 make 的时候报 `fatal error: postgres.h No such file or directory` 的错误,可以安装一下 sudo apt install postgresql-server-dev-XX (xx换成你的postgresql版本)。 ![](https://i-blog.csdnimg.cn/direct/898a3943323c4cce922deb112c4df517.png) 看到不支持json-c就重新安装了json-c #### 7.安装json-c (所以这步提前)(不装其实也不影响) 下载路径:[https://github.com/json-c/json-c/archive/json-c-0.13.1-20180305.tar.gz](https://github.com/json-c/json-c/archive/json-c-0.13.1-20180305.tar.gz "https://github.com/json-c/json-c/archive/json-c-0.13.1-20180305.tar.gz") \[root@localhost src\]# tar -zxvf json-c-0.13.1.tar.gz \[root@localhost src\]# cd json-c-0.13.1 \[root@localhost json-c-0.13.1\]# ./configure --prefix=/usr/local/json-c-0.13.1 //make编译 \[root@localhost json-c-0.13.1\]# make -j 4 \[root@localhost json-c-0.13.1\]# make install 看到不支持SFCGAL,所以 #### 8.安装SFCGAL ##### 8.1 cmake 下载路径:[https://codeload.github.com/Kitware/CMake/zip/refs/tags/v3.21.1](https://codeload.github.com/Kitware/CMake/zip/refs/tags/v3.21.1 "https://codeload.github.com/Kitware/CMake/zip/refs/tags/v3.21.1") \[root@localhost src\]# unzip v3.21.1 \[root@localhost src\]# cd CMake-3.21.1/ \[root@localhost CMake-3.21.1\]# ./configure --prefix=/usr/local/cmake-3.21.1 //make编译 \[root@localhost CMake-3.21.1\]# make -j 4 \[root@localhost CMake-3.21.1\]# make install //配置环境变量 \[root@localhost CMake-3.21.1\]# vim /etc/profile export PROTOBUF_HOME=/usr/local/protobuf-3.10.1 export PROTOBUFC_HOME=/usr/local/protobuf-c-1.3.2 export CMAKE_HOME=/usr/local/cmake-3.21.1 export PATH=$GCC_HOME/bin:$CMAKE_HOME/bin:$PROTOBUF_HOME/bin:$PROTOBUFC_HOME/bin:$PATH export PKG_CONFIG_PATH=/usr/local/protobuf-3.10.1/lib/pkgconfig:/usr/local/sqlite/lib/pkgconfig:$PKG_CONFIG_PATH //保存退出,生效文件 \[root@localhost CMake-3.21.1\]# source /etc/profile ##### 8.2 cgal sfcgal依赖boost,cgal,避免编译sfcgal时各种找不到库的问题。 yum -y install boost-devel 下载路径:[https://github.com/CGAL/cgal/archive/releases/CGAL-4.13.tar.gz](https://github.com/CGAL/cgal/archive/releases/CGAL-4.13.tar.gz "https://github.com/CGAL/cgal/archive/releases/CGAL-4.13.tar.gz") \[root@localhost src\]# tar -zxvf cgal-releases-CGAL-4.13.tar.gz \[root@localhost src\]# cd cgal-releases-CGAL-4.13 \[root@localhost cgal-releases-CGAL-4.13\]# mkdir build \&\& cd build //cmake不指定安装目录 \[root@localhost build\]# cmake .. //make编译 \[root@localhost build\]# make -j 4 \[root@localhost build\]# make install 报错 ![](https://i-blog.csdnimg.cn/direct/2cb254782d3e429daee6a882f50e4725.png) Could NOT find GMP (missing: GMP_LIBRARIES GMP_INCLUDE_DIR) yum -y install boost-devel gmp* mpfr* ##### 8.3、sfcgal 下载路径:https://github.com/Oslandia/SFCGAL/archive/v1.3.8.tar.gz \[root@localhost src\]# tar -zxvf v1.3.8.tar.gz \[root@localhost src\]# cd SFCGAL-1.3.8/ \[root@localhost SFCGAL-1.3.8\]# mkdir build \&\& cd build \[root@localhost build\]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/sfcgal-1.3.8 .. \[root@localhost build\]# make -j 4 \[root@localhost build\]# make install #### 8.安装成功后可以进入 postgresql 数据库,在数据库中创建 postgis 拓展插件。 # 切换到 postgres 用户 su - postgres # 链接进入数据库 [postgres@localhost ~]$ psql psql (15.6) Type "help" for help. #创建 postgis 拓展 postgres=# create extension postgis; ERROR: could not load library "/opt/pg15.6/lib/postgresql/postgis-3.so": libgeos_c.so.1: cannot open shared object file: No such file or directory 报错1:ERROR: could not load library "/opt/pg15.6/lib/postgresql/postgis-3.so": libgeos_c.so.1: cannot open shared object file: No such file or directory 参考这篇解决:并没有成功 [postgis 安装 libgeos_c.so.1: cannot open shared object file-CSDN博客](https://blog.csdn.net/stone1116/article/details/105806315 "postgis 安装 libgeos_c.so.1: cannot open shared object file-CSDN博客") 解决办法: 环境变量配置问题解决方案如下: 打开: vi /etc/ld.so.conf 添加:/usr/local/lib 退出执行 :ldconfig 了解原因: 查看下面文章 https://blog.csdn.net/u014266895/article/details/61928602 又参考[linux安装postgis报错疑难杂症_checking for library containing gdalallregister...-CSDN博客](https://blog.csdn.net/z418229223/article/details/142211769 "linux安装postgis报错疑难杂症_checking for library containing gdalallregister...-CSDN博客") ![](https://i-blog.csdnimg.cn/direct/05dddb9bfc9248e381f18272c80f8560.png) 复制粘贴了还是报错 仔细阅读这篇教程[Linux源码安装postgis(包括SFCGAL,PGRouting)_liunx sfcgal下载-CSDN博客](https://blog.csdn.net/God_sign/article/details/120347212 "Linux源码安装postgis(包括SFCGAL,PGRouting)_liunx sfcgal下载-CSDN博客") 感觉应该是/etc/ld.so.conf的问题于是把所有能添加的都加了还是报错 ![](https://i-blog.csdnimg.cn/direct/8dfca27034f643c790a7a02159101db4.png) 最后删除粘贴内容:结合两篇文章的思路: 打开: vi /etc/ld.so.conf 添加: /usr/local/geos-3.8.0/lib /usr/local/proj-6.0.0/lib /usr/local/lib 退出执行 :ldconfig ![](https://i-blog.csdnimg.cn/direct/8ab9c4ae56574090ab65e155af5327d9.png) ![](https://i-blog.csdnimg.cn/direct/f1d872cdad594eef9b6bd55110c84155.png) ![](https://i-blog.csdnimg.cn/direct/a9828af5615949c0b25c2231106f57e0.png) 报错1:ERROR: could not load library "/opt/pg15.6/lib/postgresql/postgis-3.so": libgeos_c.so.1: cannot open shared object file: No such file or directory 解决 为了找出是究竟是哪个配置少导致的,又一 一删除试了发现:解决报错1需添加两个,缺一不可 /usr/local/geos-3.8.0/lib /usr/local/lib 查看了/usr/local/lib内容也没libgeos_c.so.1相关的,没搞明白为啥要添加,只知道不添加会报错,添加了就不会报错 ![](https://i-blog.csdnimg.cn/direct/10c12b203fbe4caaae03407feb75865f.png) 但是只添加这两个又报错: 报错2 ERROR: could not load library "/opt/pg15.6/lib/postgresql/postgis-3.so": libproj.so.15: cannot open shared object file: No such file or directory ![](https://i-blog.csdnimg.cn/direct/6b9e6fb993ad46d1b4aef3555d7f7ee2.png) 借助以上解决问题的思路 执行 find / -name "libproj.so.15" 2\>/dev/null 发下在/usr/local/proj-6.0.0/lib目录下, ![](https://i-blog.csdnimg.cn/direct/c0a6d19d1fb94f049efa78b71a2aef52.png) 于是又将/usr/local/proj-6.0.0/lib 加入/etc/ld.so.conf 打开: vi /etc/ld.so.conf 添加: /usr/local/proj-6.0.0/lib 保存,退出执行 :ldconfig 问题2解决 create extension postgis; 成功 ![](https://i-blog.csdnimg.cn/direct/bbec5c1b34a8467a8fa761515db4dcc6.png) ### 使用 Postgis # 创建插件拓展 create extension postgis; # 创建表格 CREATE TABLE t_point( "id" int4 NOT NULL, "point" geometry(point, 4326), PRIMARY KEY ("id") ); # 插入数据 INSERT INTO t_point (id,point) VALUES (1,ST_GeomFromText('Point(31.2323 120.2323)',4326)) # 查询数据 SELECT id,ST_ASTEXT(point) FROM t_point WHERE id = 1 `ST_ASTEXT、ST_GeomFromText`是内置方法,其他一些常用方法可以参考:[官方文档](https://postgis.net/docs/manual-3.4/PostGIS_Special_Functions_Index.html#NewFunctions_3_4 "官方文档") 完... 参考博客 [Postgresql------postgis安装 - CHENGHD - 博客园](https://www.cnblogs.com/chenghd/p/18396233 "Postgresql——postgis安装 - CHENGHD - 博客园") [Linux源码安装postgis(包括SFCGAL,PGRouting)_liunx sfcgal下载-CSDN博客](https://blog.csdn.net/God_sign/article/details/120347212 "Linux源码安装postgis(包括SFCGAL,PGRouting)_liunx sfcgal下载-CSDN博客") [postgis 安装 libgeos_c.so.1: cannot open shared object file-CSDN博客](https://blog.csdn.net/stone1116/article/details/105806315 "postgis 安装 libgeos_c.so.1: cannot open shared object file-CSDN博客") 心得:安装过程不太会一帆风顺,但不要害怕,不要着急,遇到啥问题解决啥问题就行了,若一个问题搜了很久还没解决可换换脑子休息下,能脑子歇歇,更灵活了再解决 相信自己,逢山开路,遇水搭桥,或者有时候若问题一直无法解决,也可换个思路换个版本 问题就解决了,这篇就到此为止吧,祝好运顺利!

相关推荐
QQ828929QQ2 小时前
MySQL Explain 分析 SQL 执行计划
数据库·sql·mysql
码农很忙2 小时前
SCALE发布《2025年12月大模型SQL能力排行榜》:格局与趋势洞察
数据库·业界资讯
放弃 治疗2 小时前
Windows 11 系统 Oracle PLSQL 工具(PL/SQL Developer 最新版本)完整安装与配置教程
数据库·sql
IvanCodes2 小时前
openGauss 实战手册:gsql 常用命令、认证配置与运维工具全解
大数据·数据库·sql·opengauss
fengxin_rou2 小时前
Redis 核心数据结构:跳表实现、层高设计解析
数据结构·数据库·redis
爱学习的阿磊2 小时前
用Python实现自动化的Web测试(Selenium)
jvm·数据库·python
@ chen2 小时前
MySQL 存储引擎概览
数据库·mysql
橘子132 小时前
MySQL事务(十一)
数据库·mysql
DBA小马哥2 小时前
Oracle兼容替换案例:某省运营商传输网管系统国产化落地实战
数据库·oracle