[05] PG+PostGIS 安装
记录工作中一次 PostgreSQL 11.16 + PostGIS 3.2.2 的安装过程。
1. 配置本地 YUM 源#
经与华为客服沟通,当前环境不支持后端挂载操作,需根据系统版本下载 ISO 文件自行创建本地 YUM 源下载相关依赖包。
配置 DNS=xxx.xxx.xxx.xxx/xxx.xxx.xxx.xxx,然后用此命令下载下镜像文件:
# ARM版本
$ wget https://xxx/HCE-2.0-aarch64-dvd-20220705.iso --no-check-certificate
# X86版本
$ wget https://xxx/HCE-2.0-x86_64-dvd-20220705.iso --no-check-certificate
本次安装机器的系统版本信息:
$ uname -a
Linux ec-xuz-2.novalocal 5.10.0-60.18.0.50.r865_35.hce2.x86_64 #1 SMP Sun Mar 26 18:01:01 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
(1)配置 DNS
$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
# --------------------------------
DNS1=xxx.xxx.xxx.xxx
DNS2=xxx.xxx.xxx.xxx
# --------------------------------
$ systemctl restart NetworkManager
(2)下载镜像、挂载到系统
# 下载镜像
$ cd /opt
$ mkdir iso & cd iso
$ wget https://xxx/HCE-2.0-x86_64-dvd-20220705.iso --no-check-certificate
# 挂载镜像
$ cd /mnt
$ mkdir hce-2.0-iso
$ mount -o loop /opt/iso/HCE-2.0-x86_64-dvd-20220705.iso /mnt/hce-2.0-iso
(3)创建本地 yum 源
$ cd /etc/yum.repos.d
$ vim HCE-EXT.rep
# --------------------------------
[local]
name=HCE-2.0 local
baseurl=file:///mnt/hce-2.0-iso
gpgcheck=0
enabled=1
# --------------------------------
(4)更新 yum 源并下载依赖包
$ yum clean all && yum makecache && yum update
2. PostgreSQL 11.16#
2.1 前置工作#
(0)安装依赖包
$ yum search ____ | grep -i ____
$ yum install -y ____
# --------------------------------
readline-devel
openssl-devel
libxml2-devel
libxslt-devel
python
python-devel
cmake
gcc
gcc-c++
zlib-devel
bzip2
expect
uuid-devel
systemd-devel
automake
autoconf
libtool
# --------------------------------
(1)下载 PG 源码包并解压
$ cd /opt
$ wget https://ftp.postgresql.org/pub/source/v11.16/postgresql-11.16.tar.gz
$ tar -zxvf postgresql-11.16.tar.gz
(2)创建 postgres 用户
$ useradd postgres
$ echo "postgres" | passwd --stdin postgres
(3)创建安装目录及修改权限
$ mkdir -p /usr/local/postgresql
$ chown -R postgres:postgres /usr/local/postgresql
2.2 编译安装#
(4)运行 configure 脚本,配置安装选项
$ cd postgresql-11.16
$ ./configure --prefix=/usr/local/postgresql --with-pgport=5432 \--with-openssl \--with-libxml \--with-libxs
lt \--with-ossp-uuid \--with-systemd
(5)编译&安装所有插件
$ make world
$ make install-world
2.3 初始化#
(6)配置环境变量
$ mkdir /usr/local/postgresql/data
$ vim /etc/profile
# --------------------------------
export PGHOME=/usr/local/postgresql
export PGDATA=$PGHOME/data
export PATH=$PGHOME/bin:$PATH
# --------------------------------
$ source /etc/profile
(7)初始化数据
$ su - postgres
$ /usr/local/postgresql/bin/initdb -D /usr/local/postgresql/data --encoding=UTF8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8
(8)使用 PG 命令行交互式客户端工具
安装成功。
(9)关闭、重启命令
$ pg_ctl stop -D /usr/local/postgresql/data
$ pg_ctl start -D /usr/local/postgresql/data
3. PostGIS 3.2.2#
3.1 前置安装#
a. geos-3.9.2#
$ wget https://download.osgeo.org/geos/geos-3.9.2.tar.bz2
$ tar -xvf geos-3.9.2.tar.bz2
$ cd geos-3.9.2/
$ ./configure --prefix=/usr/local/geos-3.9.2
$ make
$ make install
b. libxml2#
$ wget https://gitlab.gnome.org/GNOME/libxml2/-/archive/v2.9.11/libxml2-v2.9.11.tar.gz
$ tar -zxvf libxml2-v2.9.11.tar.gz
$ cd libxml2-v2.9.11
$ sh autogen.sh --prefix=/usr/local/libxml-2.9.11
$ make
$ make install
因为系统 python 版本过高(3.9.9),在编译这步失败了。
在 yum 中找到了差不多版本的,直接用了。
c. json-c-0.15#
编译安装方式如下:
$ wget https://github.com/json-c/json-c/archive/refs/tags/json-c-0.15-20200726.tar.gz
$ tar -xvf json-c-json-c-0.15-20200726.tar.gz
$ cd json-c-json-c-0.15-20200726/
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/json-c-0.15
$ make
$ make install
本机采用 yum 安装方式:
d. proj-8.2.1#
(1)依赖较高版本的 sqlite3 >= 3.11
$ yum install -y sqlite.x86_64
(2)其他依赖
$ yum install -y libtiff.x86_64
$ yum install -y libtiff-devel.x86_64
$ yum install -y libsqlite3x.x86_64
$ yum install -y libsqlite3x-devel.x86_64
(3)编译安装
$ wget https://download.osgeo.org/proj/proj-8.2.1.tar.gz
$ tar -zxvf proj-8.2.1.tar.gz
$ cd proj-8.2.1
$ ./configure --prefix=/usr/local/proj-8.2.1
$ make -j12
$ make install
$ mkdir build && cd build
$ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/proj-8.2.1 ..
$ make -j12
$ make install
(4)环境变量
$ vim /etc/profile
# --------------------------------
export PROJ_HOME=/usr/local/proj-8.2.1
export PKG_CONFIG_PATH=$PROJ_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
# --------------------------------
e. gdal-3.4.3#
(1)编译安装
$ wget https://download.osgeo.org/gdal/3.4.3/gdal-3.4.3.tar.gz
$ tar -zxvf gdal-3.4.3.tar.gz
$ cd gdal-3.4.3
$ sh autogen.sh
$ ./configure --prefix=/usr/local/gdal-3.4.3 --with-proj=/usr/local/proj-8.2.1
$ make -j12
$ make install
(2)检测是否编译成功
$ cd /usr/local/gdal-3.4.3/
$ ./ogr2ogr --formats
f. protobuf-3.20.1#
$ tar -zxvf protobuf-3.20.1.tar.gz
$ cd protobuf-3.20.1
$ sh autogen.sh
$ ./configure --prefix=/usr/local/protobuf-3.20.1
$ make
$ make install
g. protobuf-c-1.4.1#
$ wget https://github.com/protobuf-c/protobuf-c/releases/download/v1.4.1/protobuf-c-1.4.1.tar.gz
$ tar -zxvf protobuf-c-1.4.1.tar.gz
$ cd protobuf-c-1.4.1
$ ./configure --prefix=/usr/local/protobuf-c-1.4.1
$ make
$ make install
h. CGAL#
(1)前置安装
$ yum install -y gmp.x86_64
$ yum install -y gmp-c++.x86_64
$ yum install -y gmp-devel.x86_64
$ yum install -y boost-devel
$ yum install -y mpfr.x86_64
$ yum install -y mpfr-devel.x86_64
(2)编译安装
$ wget https://github.com/CGAL/cgal/archive/releases/CGAL-4.13.tar.gz
$ tar -zxvf cgal-releases-CGAL-4.13.tar.gz
$ cd cgal-releases-CGAL-4.13
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/cgal-4.13 ..
$ make -j4
$ make install
i. sfcgal#
$ wget https://github.com/Oslandia/SFCGAL/archive/v1.3.8.tar.gz
$ tar -zxvf v1.3.8.tar.gz
$ cd SFCGAL-1.3.8
$ mkdir build && cd build
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/sfcgal-1.3.8 ..
$ make -j4
$ make install
3.2 追加动态链接库#
$ vim /etc/ld.so.conf
# --------------------------------
/usr/local/proj-8.2.1/lib
/usr/local/gdal-3.4.3/lib
/usr/local/geos-3.9.2/lib
/usr/local/json-c-0.15/lib64
/usr/local/protobuf-3.20.1/lib
/usr/local/protobuf-c-1.4.1/lib
/usr/local/sfcgal-1.3.8/lib64
# --------------------------------
$ ldconfig -v
3.3 添加环境变量#
$ vim /etc/profile
# --------------------------------
# protobuf
export PROTOBUF_HOME=/usr/local/protobuf-3.20.1
export PKG_CONFIG_PATH=$PROTOBUF_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
# protobufc
export PROTOBUFC_HOME=/usr/local/protobuf-c-1.4.1
export PKG_CONFIG_PATH=$PROTOBUFC_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
# geos
export GEOS_HOME=/usr/local/geos-3.9.2
export PKG_CONFIG_PATH=$GEOS_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
# gdal
export GDAL_HOME=/usr/local/gdal-3.4.3
export PKG_CONFIG_PATH=$GDAL_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
# jsonc
export JSONC_HOME=/usr/local/json-c-0.15
export PKG_CONFIG_PATH=$JSONC_HOME/lib64/pkgconfig:$PKG_CONFIG_PATH
# proj
export PROJ_HOME=/usr/local/proj-8.2.1
export PKG_CONFIG_PATH=$PROJ_HOME/lib/pkgconfig:$PKG_CONFIG_PATH
# sfc
export SFC_HOME=/usr/local/sfcgal-1.3.8
export PKG_CONFIG_PATH=$SFC_HOME/lib64/pkgconfig:$PKG_CONFIG_PATH
export PATH=$SFC_HOME/bin:$GDAL_HOME/bin:$GEOS_HOME/bin:$PROTOBUFC_HOME/bin:$PROTOBUF_HOME/bin:$PATH
# --------------------------------
$ source /etc/profile
3.4 安装 PostGIS#
(1)编译安装 PostGIS
$ wget http://postgis.net/stuff/postgis-3.2.2.tar.gz
$ tar -zxvf postgis-3.2.2.tar.gz
$ cd postgis-3.2.2
$ sh autogen.sh
$ ./configure --prefix=/usr/local/postgis-3.2.2 --with-pgconfig=/usr/local/postgresql/bin/pg_config
$ make
$ make install
(2)PostgreSQL 校验
-- PostGIS的基本核心功能,仅支持地理图形(矢量要素),在其他Extension前启用
CREATE EXTENSION postgis;
-- 对栅格数据的支持
CREATE EXTENSION postgis_raster;
-- 拓扑功能的支持
CREATE EXTENSION postgis_topology;
-- 三维空间上的拓展,集成了CGAL,ST_3DDifference、ST_3DUnion等
CREATE EXTENSION postgis_sfcgal;
select * from pg_available_extensions where name like 'postgis%';
(3)通过 psql postgres postgres
终端测试 GEO 数据类型
CREATE TABLE testgeo (name VARCHAR(128), point GEOMETRY(GEOMETRY, 4490));
INSERT INTO testgeo (name, point) VALUES ('tree', ST_GeomFromText('POINT(121.6188 38.88245)', 4490));
参考:
https://blog.51cto.com/u_15431495/6294867
https://blog.csdn.net/w345731923/article/details/128117321
https://trac.osgeo.org/postgis/wiki/UsersWikiPostgreSQLPostGIS
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~