作者:gb
1. PostGIS概述
本文档的部署方案为PanWeiDB数据库上部署,但实操方案基于 OpenGauss 3.0.0的PostGIS部署方案编写,官方参考网址:Post Gis Extension (opengauss.org)
OpenGauss提供 PostGIS Extension(版本为PostGIS-2.4.2),PostGIS Extension是PostgreSQL的空间数据库扩展,提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符,PostGIS Extension完全遵循OpenGIS规范。安装PostGIS Extension依赖第三方开源软件如下:
- Geos 3.6.2
- Proj 4.9.2
- Json 0.12.1
- Libxml2 2.7.1
- Gdal 1.11.0
2. PostGIS环境
本次安装测试环境为腾讯云CentOS 7.6_X86架构下的PanWeiDB单实例数据库上进行安装部署测试。实际生产环境OS可能为BCLiunx、CentOS、Kylin等系统环境,包括X86或ARM等两种不同架构,这与实际测试中X86架构下的安装部署步骤基本相同。该单实例部署同样可适用于PanWeiDB的一主二从集群环境部署,后面会介绍集群环境下的免部署安装方式。以下为安装配置PostGIS中需要涉及下载的安装包或插件包的下载地址:
- gcc-7.3.0下载地址
https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
- gmp-6.1.0下载地址
https://ftp.gnu.org/gnu/gmp/gmp-6.1.0.tar.xz
- mpfr-3.1.4下载地址
https://ftp.gnu.org/gnu/mpfr/mpfr-3.1.4.tar.gz
- mpc-1.0.3下载地址
https://ftp.gnu.org/gnu/mpc/mpc-1.0.3.tar.gz
- zlib下载地址
https://sourceforge.net/projects/libpng/files/zlib/1.2.8/zlib-1.2.8.tar.gz/download
- postGIS下载地址
https://opengauss.obs.cn-south-1.myhuaweicloud.com/dependency/postgis-xc-master-2020-09-17.tar.gz
- postgis_2.4.2-1.patch下载地址
- extension_dependency.h下载地址
- openGauss-third_party_binarylibs.tar (非必须)下载地址
https://gitee.com/link?target=https%3A%2F%2Fopengauss.obs.cn-south-1.myhuaweicloud.com%2F3.0.0%2FopenGauss-third_party_binarylibs.tar.gz
以上为安装部署中需要涉及到安装包或插件包,可先下载后上传,也可以通过wget在线下载。在进行上传或下载安装时需注意要修改其所属组omm:dbgrp及权限700,禁止将权限修改为755,这将导致安装完成后重启集群将无法正常启动。
3. PostGIS安装
整个PostGIS的安装主要分为两个环境的编译安装部署,即GCC-7.3.0环境的编译安装和PostGIS插件的编译安装,下面介绍这两部分的安装方法。
3.1 GCC-7.3.0编译安装
若数据库中已经安装好GCC-7.3.0,则跨过此步骤。GCC-7.3.0 编译器推荐使用源码由低版本的 gcc 和 g++ 编译器进行升级安装。若数据库实例中没有低版本 gcc 和 g++ 编译器,可以通过挂载操作系统镜像等方法进行安装,这里不做赘述。GCC-7.3.0编译器相关依赖软件包,包括 GCC-7.3.0、gmp-6.1.0、mpfr-3.1.4、mpc-1.0.3。
这里需要特别注意的是,实际生产环境中已存在的GCC版本可能低于7.3.0或高于7.3.0,无论哪种情况均需要将GCC重新编译为7.3.0这个版本,本次测试是在低于该版本的情况下进行的编译安装,若出现高于该版本的GCC可通过手工编译安装(未测试)或下载 openGauss-third_party_binarylibs.tar 包的方式替换路径进行平替式的编译安装。
3.1.1 创建gcc相关目录并上传关联依赖包解压
以下安装依赖包操作通过任一台主机登录omm用户进行,将gcc-7.3.0、gmp-6.1.0、mpfr-3.1.4、mpc-1.0.3上传到packages目录中并进行解压,同时创建对应的编译安装目录。
su – omm mkdir $GAUSSHOME/gcc mkdir $GAUSSHOME/gcc/packages cd $GAUSSHOME/gcc/packages tar -xzf gcc-7.3.0.tar.gz tar -xvJf gmp-6.1.0.tar.xz tar -xzf mpc-1.0.3.tar.gz tar -xzf mpfr-3.1.4.tar.gz chown -R omm:dbgrp /database/panweidb chmod -R 700 /database/panweidb mkdir $GAUSSHOME/gcc/gcc-7.3.0 mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-6.1.0 mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4 mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3 mkdir $GAUSSHOME/gcc/gcc-7.3.0/depend/gcc |
【备注】再次注意 /database/panweidb 的权限不要给755,否则安装后重启集群或创建、插入等操作均会出现集群宕掉的情况。
3.1.2 编译安装gmp-4.3.2
cd $GAUSSHOME/gcc/packages/gmp-6.1.0 ./configure --prefix $GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2 make -sj && make install -sj |
3.1.3 编译安装mpfr-2.4.2
cd $GAUSSHOME/gcc/packages/mpfr-3.1.4 ./configure --prefix $GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4 --with-gmp=$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2 make -sj && make install -sj |
3.1.4 编译安装mpc-1.0.3
cd $GAUSSHOME/gcc/packages/mpc-1.0.3 ./configure --prefix=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3 --with-gmp=$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2 --with-mpfr=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4 make -sj && make install -sj |
3.1.5 编译安装gcc-7.3.0
- 添加 lib 路径至 ~/.bashrc
vim ~/.bashrc export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2/lib:$GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4/lib:$GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3/lib source ~/.bashrc |
- 执行下列命令完成 gcc 安装操作
cd $GAUSSHOME/gcc/packages/gcc-7.3.0 ./configure --prefix=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc -disable-multilib --with-gmp=$GAUSSHOME/gcc/gcc-7.3.0/depend/gmp-4.3.2 -enable-languages=c,c++ --with-mpfr=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpfr-3.1.4 --with-mpc=$GAUSSHOME/gcc/gcc-7.3.0/depend/mpc-1.0.3 make -sj && make install -sj |
【备注】该操作等待的时间较长,请耐心等待;
- 设置环境变量
vim ~/.bashrc export CC=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/bin/gcc export CXX=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/bin/g++ export LD_LIBRARY_PATH=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/lib64:$LD_LIBRARY_PATH export PATH=$GAUSSHOME/gcc/gcc-7.3.0/depend/gcc/bin:$PATH source ~/.bashrc gcc -v |
以上即完成了GCC-7.3.0的编译安装,通过gcc -v确认版本即可。
3.2 确认zlib、autoconf和automake已安装
Libxml2软件包编译安装依赖zlib无损数据压缩库,可通过在omm账户下执行命令find $GAUSSHOME/ -name libz.so查看zlib是否安装,如果libz.a存在则zlib已安装。
JSON-C 软件包编译安装依赖 autoconf 和 automake 工具,若数据库实例中没有 autoconf 和 automake 工具,可以通过挂载操作系统镜像等方法进行安装,这里不做赘述。
3.3 PostGIS依赖安装
3.3.1 上传postgis-xc-master-2020-09-17.tar包上传、解压并更名
cd $GAUSSHOME tar zxvf postgis-xc-master-2020-09-17.tar.gz mv postgis-xc-master postgis-xc |
3.3.2 将postgis_2.4.2-1.patch文件上传至$GAUSSHOME目录并编译
cd $GAUSSHOME/postgis-xc/ patch -p1 < $GAUSSHOME/postgis_2.4.2-1.patch |
3.3.3 将extension_dependency.h_v3.0.0文件上传到$GAUSSHOME/include/postgresql/server/目录中并改名
cd $GAUSSHOME/include/postgresql/server/ mv extension_dependency.h_v3.0.0 extension_dependency.h |
3.3.4 编译安装Geos并生成相关动态链接库
cd $GAUSSHOME/postgis-xc/geos-3.6.2 chmod +x ./configure ./configure --prefix=$GAUSSHOME/install/geos make -sj make install -sj |
3.3.5 编译安装Proj并生成相关动态链接库
cd $GAUSSHOME/postgis-xc/proj-4.9.2 chmod +x ./configure ./configure --prefix=$GAUSSHOME/install/proj make -sj make install -sj |
3.3.6 编译安装Libxml2并生成相关动态链接库
cd $GAUSSHOME/postgis-xc/libxml2-2.7.1 chmod +x ./configure ./configure --prefix=$GAUSSHOME/install/libxml2 make -sj make install -sj |
3.3.7 编译安装PostGIS并生成相关动态链接库
cd $GAUSSHOME/postgis-xc/postgis-2.4.2 chmod +x ./configure ./configure --prefix=$GAUSSHOME/install/postgis2.4.2 --with-pgconfig=$GAUSSHOME/bin/pg_config --with-projdir=$GAUSSHOME/install/proj --with-geosconfig=$GAUSSHOME/install/geos/bin/geos-config --with-jsondir=$GAUSSHOME/install/json --with-xml2config=$GAUSSHOME/install/libxml2/bin/xml2-config --without-raster --without-topology CFLAGS='-O2 -fpermissive -DPGXC -pthread -D_THREAD_SAFE -D__STDC_FORMAT_MACROS -DMEMORY_CONTEXT_CHECKING -w' CC=g++ make -sj make install -sj |
【备注】在进行该步骤操作前需完成如下两步的更改操作:
- 需按如下图示将“OpenGauss”名称修改为“PanWeiDB”并保存;
- 将lock文件夹里的所有文件上传到/database/panweidb/app/include/postgresql/server/storage/lock 中
3.4 将以上编译安装完成的PostGIS相关动态链接库分发到数据库实例节点中
mv $GAUSSHOME/lib/postgresql/postgis-2.4.so $GAUSSHOME/install/postgis-2.4.so cp $GAUSSHOME/install/postgis-2.4.so $GAUSSHOME/lib/postgresql/postgis-2.4.so cp $GAUSSHOME/install/json/lib/libjson-c.so.2 $GAUSSHOME/lib/libjson-c.so.2 cp $GAUSSHOME/install/geos/lib/libgeos_c.so.1 $GAUSSHOME/lib/libgeos_c.so.1 cp $GAUSSHOME/install/proj/lib/libproj.so.9 $GAUSSHOME/lib/libproj.so.9 cp $GAUSSHOME/install/geos/lib/libgeos-3.6.2.so $GAUSSHOME/lib/libgeos-3.6.2.so cp $GAUSSHOME/install/postgis2.4.2/lib/liblwgeom-2.4.so.0 $GAUSSHOME/lib/liblwgeom-2.4.so.0 cp $GAUSSHOME/postgis-xc/postgis-2.4.2/postgis--2.4.2.sql $GAUSSHOME/share/postgresql/extension/postgis--2.4.2.sql cp $GAUSSHOME/postgis-xc/postgis-2.4.2/postgis.control $GAUSSHOME/share/postgresql/extension/postgis.control # cp $GAUSSHOME/bin/pgsql2shp $GAUSSHOME/bin/pgsql2shp # cp $GAUSSHOME/bin/shp2pgsql $GAUSSHOME/bin/shp2pgsql |
【备注】pgsql2shp和shp2pgsql文件在在实验环境下编译过程中已存在于$GAUSSHOME/bin/目录中,因此无需进行cp动作;此外,在PanWeiDB一主二从的集群环境下,只需将以上十个需要复制的文件分别CP到两个从库实例对应的路径上即可实现postGIS的免安装使用。
4. PostGIS免安装配置文件
以上通过复制已编译安装完成的配置文件到从库上,从而实现从库免安装PostGIS的方法,仅限于主从实例环境完全相同的集群,且在生产环境下仅限于应用于从库上,主库依然建议手工编译安装PostGIS,这样才可最大限度的实现PostGIS的适配兼容。




