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/

这里我选择的是 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,安装了就不会报错

//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时报错

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 官网地址
Gdal 仓库地址

这里我选择的是 gdal-3.3.1.tar.gz

安装 Gdal 2.4.2和3.0.0库报错,改用Gdal 3.3.1问题解决

源码安装:

下载路径: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 官网

我这里使用的是 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:

解决办法: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.

添加报错参数

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版本)。

看到不支持json-c就重新安装了json-c

7.安装json-c (所以这步提前)(不装其实也不影响)

下载路径: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

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

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

报错

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博客

解决办法:

环境变量配置问题解决方案如下:

打开: 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博客

复制粘贴了还是报错

仔细阅读这篇教程Linux源码安装postgis(包括SFCGAL,PGRouting)_liunx sfcgal下载-CSDN博客

感觉应该是/etc/ld.so.conf的问题于是把所有能添加的都加了还是报错

最后删除粘贴内容:结合两篇文章的思路:

打开: vi /etc/ld.so.conf

添加:

/usr/local/geos-3.8.0/lib

/usr/local/proj-6.0.0/lib

/usr/local/lib

退出执行 :ldconfig

报错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相关的,没搞明白为啥要添加,只知道不添加会报错,添加了就不会报错

但是只添加这两个又报错:

报错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

借助以上解决问题的思路

执行 find / -name "libproj.so.15" 2>/dev/null

发下在/usr/local/proj-6.0.0/lib目录下,

于是又将/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; 成功

使用 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是内置方法,其他一些常用方法可以参考:官方文档

完...

参考博客

Postgresql------postgis安装 - CHENGHD - 博客园

Linux源码安装postgis(包括SFCGAL,PGRouting)_liunx sfcgal下载-CSDN博客

postgis 安装 libgeos_c.so.1: cannot open shared object file-CSDN博客

心得:安装过程不太会一帆风顺,但不要害怕,不要着急,遇到啥问题解决啥问题就行了,若一个问题搜了很久还没解决可换换脑子休息下,能脑子歇歇,更灵活了再解决

相信自己,逢山开路,遇水搭桥,或者有时候若问题一直无法解决,也可换个思路换个版本

问题就解决了,这篇就到此为止吧,祝好运顺利!

相关推荐
火山上的企鹅19 小时前
Codex实战:APP远程升级服务搭建(三)后台管理页面(APK 上传、版本管理、多应用页签)
服务器·网络·数据库·oracle·qgc
阿狸猿19 小时前
论 NoSQL 数据库技术及其应用
数据库·nosql
FBI HackerHarry浩19 小时前
DataGrip2023.2.3默认保存的数据库和.sql文件在哪里?怎么修改默认路径?
数据库
袁小皮皮不皮20 小时前
3.HCIP OSPF补充知识(优化版)
服务器·网络·数据库·网络协议·智能路由器
运筹vivo@20 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
志栋智能20 小时前
超自动化巡检:知识沉淀与团队协作的新载体
大数据·运维·网络·数据库·人工智能·自动化
syt_biancheng21 小时前
Redis初识
数据库·redis·缓存
cmes_love21 小时前
股票逐笔level2历史行情下载十档订单薄五档tick分钟下载分享
数据库·区块链
仙俊红21 小时前
SQL 调优需要掌握的知识
数据库·sql
fofantasy1 天前
NSK LH12AN 微型导轨技术手册
运维·网络·数据库·经验分享·规格说明书