Loading

[04] 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

posted @ 2020-09-25 17:35  tree6x7  阅读(180)  评论(0编辑  收藏  举报