信创云编译安装PostgreSQL14和PostGIS

信创云平台离线编译安装PostgreSQL 14、PostGIS

0. 背景说明

0.1 信创云环境

ARM CPU、AArch64架构、麒麟操作系统

[root@localhost:~]$ nkvers
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server release V10 (Sword)

Kernel:
4.19.90-24.4.v2101.ky10.aarch64

Build:
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-aarch64-Build09/20210524
#################################################

0.2 目标软件及相关依赖源码

序号目标软件源码版本下载链接
01PostgreSQL14.5postgresql-14.5.tar.gz
02PostGIS3.3.2postgis-3.3.2.tar.gz
序号第三方依赖源码版本是否可选下载链接
01GEOS3.11.2geos-3.11.2.tar.bz2
02sqlite3.42.0sqlite-autoconf-3420000.tar.gz
03proj6.3.2proj-6.3.2.tar.gz
04json-c0.13.1json-c-0.13.1.tar.gz
05libxml22.9.12libxml2-2.9.12.tar.gz
06protobuf3.15.8protobuf-all-3.15.8.tar.gz
07protobuf-c1.4.1protobuf-c-1.4.1.tar.gz
08GDAL3.5.2gdal-3.5.2.tar.gz
09CGAL4.13CGAL-4.13.tar.gz
10SFCGAL1.3.8SFCGAL-1.3.8.tar.gz
11PgRouting3.4.2pgrouting-3.4.2.tar.gz

2. 编译前准备

2.1 安装第三方依赖包

2.1.1 方式一:在线安装
yum install -y openssl openssl-devel pam pam-devel libxml2 libxml2-devel libxslt libxslt-devel perl perl-devel python-devel readline readline-devel  zlib zlib-devel gettext gettext-devel bison flex gcc gcc-c++ gmp gmp-c++ gmp-devel mpfr mpfr-devel
2.1.2 方式二:离线安装

软件包查找教程:https://www.cnblogs.com/hellxz/p/17634810.html

通过该教程可知,本机软件包在线源如下:

【base】https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/base/aarch64/Packages/
【updates】https://update.cs2c.com.cn/NS/V10/V10SP2/os/adv/lic/updates/aarch64/Packages/

# 安装示例
rpm -ivh libstdc++-devel-7.3.0-20190804.35.p02.ky10.aarch64.rpm

依赖关系如下:

├── 01-gcc-c++
│   ├── gcc-c++-7.3.0-20190804.35.p02.ky10.aarch64.rpm
│   └── libstdc++
│       └── libstdc++-devel-7.3.0-20190804.35.p02.ky10.aarch64.rpm
├── 02-openssl
│   ├── openssl-1.1.1f-4.p01.ky10.aarch64.rpm
│   ├── openssl-devel
│   │   ├── krb5-devel
│   │   │   ├── e2fsprogs-devel-1.45.6-1.ky10.aarch64.rpm
│   │   │   ├── keyutils-libs-devel-1.6.3-1.ky10.aarch64.rpm
│   │   │   └── libverto-devel-0.3.1-2.ky10.aarch64.rpm
│   │   └── krb5-devel-1.18.2-1.ky10.aarch64.rpm
│   └── openssl-devel-1.1.1f-4.p01.ky10.aarch64.rpm
├── 03-pam
│   ├── pam-1.4.0-3.p04.ky10.aarch64.rpm
│   └── pam-devel-1.4.0-3.p04.ky10.aarch64.rpm
├── 04-libxml2
│   ├── libxml2-2.9.10-11.ky10.aarch64.rpm
│   └── libxml2-devel-2.9.10-11.ky10.aarch64.rpm
├── 05-libxslt
│   ├── libxslt-1.1.34-3.ky10.aarch64.rpm
│   ├── libxslt-devel
│   │   ├── libgcrpt-devel
│   │   │   └── libgpg-error-devel-1.38-1.ky10.aarch64.rpm
│   │   └── libgcrypt-devel-1.8.6-2.ky10.aarch64.rpm
│   └── libxslt-devel-1.1.34-3.ky10.aarch64.rpm
├── 06-perl
│   └── perl-devel-5.28.3-3.p01.ky10.aarch64.rpm
├── 07-python
│   ├── python2-devel-2.7.18-1.se.01.ky10.aarch64.rpm
│   └── python3-devel-3.7.9-6.ky10.aarch64.rpm
├── 08-readline
│   ├── readline-8.0-3.ky10.aarch64.rpm
│   ├── readline-devel
│   │   └── ncurses-devel-6.2-1.ky10.aarch64.rpm
│   └── readline-devel-8.0-3.ky10.aarch64.rpm
├── 09-zlib
│   ├── zlib-1.2.11-17.1.ky10.aarch64.rpm
│   └── zlib-devel-1.2.11-17.1.ky10.aarch64.rpm
├── 10-gettext
│   ├── gettext-0.21-2.ky10.aarch64.rpm
│   └── gettext-devel-0.21-2.ky10.aarch64.rpm
├── 11-bison
│   └── bison-3.6.4-1.ky10.aarch64.rpm
├── 12-flex
│   └── flex-2.6.4-2.ky10.aarch64.rpm
├── 13-boost
│   ├── boost
│   │   ├── boost-atomic-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-chrono-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-container-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-context-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-contract-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-coroutine-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-date-time-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-fiber-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-filesystem-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-graph-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-locale-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-log-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-math-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-nowide-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-numpy3
│   │   │   ├── numpy3
│   │   │   │   ├── openblas
│   │   │   │   │   └── libgfortran-7.3.0-20190804.35.p02.ky10.aarch64.rpm
│   │   │   │   ├── openblas-0.3.10-1.ky10.aarch64.rpm
│   │   │   │   └── openblas-devel-0.3.10-1.ky10.aarch64.rpm
│   │   │   └── python3-numpy-1.16.5-3.ky10.aarch64.rpm
│   │   ├── boost-numpy3-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-program-options-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-python3-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-random-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-serialization-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-stacktrace-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-system-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-test-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-thread-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-timer-1.73.0-3.p01.ky10.aarch64.rpm
│   │   ├── boost-type_erasure-1.73.0-3.p01.ky10.aarch64.rpm
│   │   └── boost-wave-1.73.0-3.p01.ky10.aarch64.rpm
│   ├── boost-1.73.0-3.p01.ky10.aarch64.rpm
│   └── boost-devel-1.73.0-3.p01.ky10.aarch64.rpm
├── 14-gmp
│   ├── gmp-6.2.0-1.ky10.aarch64.rpm
│   ├── gmp-c++-6.2.0-1.ky10.aarch64.rpm
│   └── gmp-devel-6.2.0-1.ky10.aarch64.rpm
└── 15-mpfr
    ├── mpfr-4.1.0-1.ky10.aarch64.rpm
    └── mpfr-devel-4.1.0-1.ky10.aarch64.rpm

在这里插入图片描述

2.2 创建用户

# 创建用户组
groupadd postgres

# 创建用户
useradd -g postgres postgres

2.3 创建目录

# 编译时的临时目录
mkdir -p /data/pg_compile

# postgres软件安装目录
mkdir -p /data/pgsql/pg14

# postgis扩展目录
mkdir -p /data/pgsql/postgis

将所有源码放到/data/pg_compile目录,并修改目录所有者。

# 修改目录所有者为 postgres 用户
chown -R postgres:postgres /data/pg_compile
chown -R postgres:postgres /data/pgsql

如下图所示:

在这里插入图片描述

3. 编译安装PostgreSQL 14

3.1 编译安装

切换到postgres用户,进入/data/pg_compile目录

su postgres
cd /data/pg_compile
# 用户: postgres
# 目录: /data/pg_compile
tar -xzf postgresql-14.5.tar.gz
cd postgresql-14.5
./configure --prefix=/data/pgsql/pg14 --with-pgport=5432 --with-openssl --with-perl --with-blocksize=16
make -j6
make install

3.2 修改用户shell配置

安装完成后,修改当前用户(postgres)的shell(bash)配置文件。

vim /home/postgres/.bashrc

追加如下内容:

export PGHOME=/data/pgsql/pg14
export PGDATA=/data/pgsql/pg14/data
export LD_LIBRARY_PATH=$PGHOME/lib:lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE='date +"%Y%m%d%H%M"'
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/share/man:$MANPATH

:wq 保存并关闭文件。

# 用户: postgres
# 重新加载配置文件
souce /home/postgres/.bashrc

# 查看PostgreSQL版本
psql --version
# 输出 psql (PostgreSQL) 14.5 说明安装成功

3.3 初始化pg数据库

# 用户: postgres
initdb -D /data/pgsql/pg14/data -E UTF8 --locale=zh_CN.utf8

3.4 配置远程访问(通过密码)

# 用户: postgres
vim /data/pgsql/pg14/data/pg_hba.conf

追加一行

host    all          all          0.0.0.0/0            md5

3.5 配置监听地址和端口

# 用户: postgres
vim /data/pgsql/pg14/data/postgresql.conf

找到 listen_addresses 配置项,去掉一些注释符号,并作如下修改:

listen_addresses = '*'
port = 5432
max_connections = 500
#superuser_reserved_connections = 3
unix_socket_directories = '/tmp'
unix_socket_group = ''
unix_socket_permissions = 0777

如下图所示:
在这里插入图片描述

3.6 启动PostgreSQL

# 用户: postgres
cd /data/pgsql/pg14
mkdir logs
/data/pgsql/pg14/bin/pg_ctl -D /data/pgsql/pg14/data -l /data/pgsql/pg14/logs/pgsql.log start

如下图所示,说明PostgreSQL正常启动。

在这里插入图片描述

3.7 通过shell连接数据库

方式一:通过unix domain socket连接:

# 用户: postgres
psql -p 5432 -U postgres

方式二:通过TCP/IP连接:

# 用户: postgres
psql -h localhost -p 5432 -U postgres

使用\password命令,修改postgres用户密码:

postgres=# \password

按键Ctrl-D退出PostgreSQL交互式shell。

在这里插入图片描述

3.7 停止PostgreSQL

/data/pgsql/pg14/bin/pg_ctl stop

可以定义命令别名。修改/home/postgres/.bashrc文件,追加如下内容:

# vim /home/postgres/.bashrc
# 追加如下内容
alias pghome='cd /data/pgsql/pg14'
alias pgstart='/data/pgsql/pg14/bin/pg_ctl -D /data/pgsql/pg14/data -l /data/pgsql/pg14/logs/pgsql.log start'
alias pgstop='/data/pgsql/pg14/bin/pg_ctl stop'
alias pgconn='psql -h localhost -p 5432 -U postgres'
# 用户: postgres
# 重新加载shell配置
source /home/postgres/.bashrc

然后就可以通过 pgstart 启动PG数据库,pgstop停止数据库,pgconn连接数据库。


在这里插入图片描述

分割线: 下面开始编译安装PostGIS-3.3.2

编译postgis必须要事先编译的几个包:

  • geos
  • sqlite
  • proj
  • libxml2
  • protobuf
  • protobuf-c

可选编译的几个包:

  • 栅格分析:GDAL (推荐安装)
  • 3D空间操作: SFCGAL
  • 网络分析: PgRouting

4. 编译安装GEOS

# 用户: postgres
# 目录: /data/pg_compile
tar -xjf geos-3.11.2.tar.bz2
cd geos-3.11.2
./configure --prefix=/data/pgsql/postgis/geos
make -j6
make install

添加GEOS到环境变量,编辑 /home/postgres/.bashrc 文件,追加如下内容:

export GEOS_HOME=/data/pgsql/postgis/geos
export PATH=$GEOS_HOME/bin:$PATH
# 用户: postgres
# 检查GEOS版本
geos-config --version

5. 编译安装sqlite

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf sqlite-autoconf-3420000.tar.gz
cd sqlite-autoconf-3420000

需要修改源码 sqlite3.c,新增如下一行宏定义:

#define SQLITE_ENABLE_COLUMN_METADATA 1

在这里插入图片描述

然后进行编译。

# 用户: postgres
# 目录: /data/pg_compile/sqlite-autoconf-3420000
./configure --prefix=/data/pgsql/postgis/sqlite
make -j6
make install

/data/postgres/.bashrc 中配置环境变量,追加如下内容

export PKG_CONFIG_PATH=/data/pgsql/postgis/sqlite/lib/pkgconfig:$PKG_CONFIG_PATH
# 重载配置
source ~/.bashrc

6. 编译安装proj

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf proj-6.3.2.tar.gz
cd proj-6.3.2
./configure --prefix=/data/pgsql/postgis/proj6
make -j6
make install

7. 编译安装json-c

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf json-c-0.13.1.tar.gz
cd json-c-0.13.1
./configure --prefix=/data/pgsql/postgis/jsonc
make -j6
make install

8. 编译安装libxml2

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf libxml2-2.9.12.tar.gz
cd libxml2-2.9.12
./configure --prefix=/data/pgsql/postgis/libxml2
make -j6
make install

如果 make install 报错,权限不足。可以切换到root用户再次 make install,然后修改目标路径的所属用户。

# 用户: root
# 目录: /data/pg_compile/libxml2-2.9.12
make install
chown -R postgres:postgres /data/pgsql/postgis/libxml2
# 记得切换回postgres用户
su postgres

9. 编译安装protobuf

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf protobuf-all-3.15.8.tar.gz
cd protobuf-3.15.8
./configure --prefix=/data/pgsql/postgis/protobuf
make -j6
make install

配置环境变量,修改 /home/postgres/.bashrc 文件,追加如下内容:

export PROTOBUF_HOME=/data/pgsql/postgis/protobuf
export PATH=$GCC_HOME/bin:$PROTOBUF_HOME/bin:$PATH
export PKG_CONFIG_PATH=/data/pgsql/postgis/protobuf/lib/pkgconfig:$PKG_CONFIG_PATH
# 用户: postgres
# 重载配置
source ~/.bashrc

# 查看protobuf版本
protoc --version
# 输出 libprotoc 3.15.8

10. 编译安装protobuf-c

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf protobuf-c-1.4.1.tar.gz
cd protobuf-c-1.4.1
./configure --prefix=/data/pgsql/postgis/protobufc
make -j6
make install

配置环境变量,修改 /home/postgres/.bashrc 文件,追加如下内容:

export PROTOBUFC_HOME=/data/pgsql/postgis/protobufc
export PATH=$GCC_HOME/bin:$PROTOBUF_HOME/bin:$PROTOBUFC_HOME/bin:$PATH
export PKG_CONFIG_PATH=/data/pgsql/postgis/protobufc/lib/pkgconfig:$PKG_CONFIG_PATH
# 用户: postgres
# 重载配置
source ~/.bashrc

11. 编译安装GDAL (推荐安装)

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf gdal-3.5.2.tar.gz
cd gdal-3.5.2
./configure --prefix=/data/pgsql/postgis/gdal --with-proj=/data/pgsql/postgis/proj6
make -j6
make install

分割线: 下面的[12]、[13]节,可选安装。

  • 3D空间操作: SFCGAL (依赖CGAL)
  • 网络分析: PgRouting

如果没有这方面的需求,可以不用安装。

如果安装了这两个包,则目标软件 (PostgreSQL和PostGIS) 移植到其他同类型机器上会比较麻烦(需要安装boost开发包、编译安装CGAL这两个步骤)

如果不安装,则可以直接将下面3个文件或目录拷贝到其他同类型机器(CPU架构、操作系统相同)上直接使用。

  • /data/pgsql
  • /home/postgres/.bashrc (用户shell配置)
  • /etc/ld.so.conf.d/postgis-aarch64.conf (动态库配置)

12. 编译安装SFCGAL (可选)

12.1 编译安装CGAL

使用root用户编译安装到默认目录。

# 用户: root (!!!)
# 目录: /data/pg_compile
tar -xzf cgal-releases-CGAL-4.13.tar.gz
cd cgal-releases-CGAL-4.13
mkdir build
cd build
# 使用默认目录,否则会有很多问题!!!
cmake ..
make -j6
make install

12.2 编译安装SFCGAL

切换到postgres用户。

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf SFCGAL-1.3.8.tar.gz
cd SFCGAL-1.3.8
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/data/pgsql/postgis/sfcgal ..
make -j6
make install

13. 编译安装PgRouting

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf pgrouting-3.4.2.tar.gz
cd pgrouting-3.4.2
mkdir build
cd build
# 不指定安装路径,此处读取环境变量pg的路径/data/pgsql/pg14/share/extension/
cmake ..
make -j6
make install

分割线: 至此,PostGIS依赖的第三方库都已安装完成,开始编译安装PostGIS本体。


14. 编译安装PostGIS

14.1 配置动态链接库

首先,配置上面安装的各个第三方库的动态链接库路径。

# 用户: root
# 编辑配置文件
vim /etc/ld.so.conf.d/postgis-aarch64.conf
# 添加如下内容
/data/pgsql/pg14/lib
/data/pgsql/postgis/proj6/lib
/data/pgsql/postgis/gdal/lib
/data/pgsql/postgis/geos/lib64
/data/pgsql/postgis/jsonc/lib
/data/pgsql/postgis/libxml2/lib
/data/pgsql/postgis/protobuf/lib
/data/pgsql/postgis/protobufc/lib
/data/pgsql/postgis/sfcgal/lib64

如果没有安装SFCGAL,最后一行可以不用添加。

# 用户: root
# 重载配置
ldconfig -v

14.2 编译安装PostGIS

切换到postgres用户。

# 用户: postgres
# 目录: /data/pg_compile
tar -xzf postgis-3.3.2.tar.gz
cd postgis-3.3.2

# [1] 如果安装了 SFCGAL 执行这条语句
./configure --prefix=/data/pgsql/postgis/postgis --with-gdalconfig=/data/pgsql/postgis/gdal/bin/gdal-config --with-geosconfig=/data/pgsql/postgis/geos/bin/geos-config --with-pgconfig=/data/pgsql/pg14/bin/pg_config  --with-projdir=/data/pgsql/postgis/proj6 --with-xml2config=/data/pgsql/postgis/libxml2/bin/xml2-config --with-jsondir=/data/pgsql/postgis/jsonc --with-protobufdir=/data/pgsql/postgis/protobufc --with-sfcgal=/data/pgsql/postgis/sfcgal/bin/sfcgal-config
# [2] 如果没有安装 SFCGAL 执行这条语句
./configure --prefix=/data/pgsql/postgis/postgis --with-gdalconfig=/data/pgsql/postgis/gdal/bin/gdal-config --with-geosconfig=/data/pgsql/postgis/geos/bin/geos-config --with-pgconfig=/data/pgsql/pg14/bin/pg_config  --with-projdir=/data/pgsql/postgis/proj6 --with-xml2config=/data/pgsql/postgis/libxml2/bin/xml2-config --with-jsondir=/data/pgsql/postgis/jsonc --with-protobufdir=/data/pgsql/postgis/protobufc

make -j6
make install

查看是否安装成功:

# 用户: postgres

# 启动PostgreSQL数据库
/data/pgsql/pg14/bin/pg_ctl -D /data/pgsql/pg14/data -l /data/pgsql/pg14/logs/pgsql.log start

# 登录数据库
psql -h localhost -p 5432 -U postgres
-- 执行sql语句
select name from pg_available_extensions;

如果看到postgis等扩展的名称,说明安装成功。如下图所示。

在这里插入图片描述

15、测试PostGIS功能

  • 创建数据库 test_spatial
  • 连接到数据库 test_spatial
  • 启用 POSTGIS 扩展。
  • 创建 Polygon(SRID:4326) 图层。
  • 插入测试数据。
  • 计算多边形面积。(先投影到平面坐标系SRID:4526,再计算面积)
postgres=# create database test_spatial owner postgres;
postgres=# \l
postgres=# \c test_spatial

postgres=# create extension postgis;
test_spatial=# create table t_build_polygon(id int primary key, name varchar(50), geom geometry(polygon, 4326));

test_spatial=# CREATE INDEX gix_build_polygon ON t_build_polygon USING GIST (geom);
test_spatial=# insert into t_build_polygon(id, name, geom) values(1, '幸福家园A栋', ST_GeomFromText('Polygon ((114.41328788 30.56880575, 114.41328294 30.56868717, 114.41357281 30.56868058, 114.41357446 30.56880246, 114.41328788 30.56880575))', 4326));
test_spatial=# insert into t_build_polygon(id, name, geom) values(2, '幸福家园C栋', ST_GeomFromText('Polygon ((114.41327965 30.56857847, 114.41327635 30.56844176, 114.41356293 30.56843847, 114.41356787 30.56857682, 114.41327965 30.56857847))', 4326));
test_spatial=# select id, name, ROUND(ST_Area(ST_Transform(geom, 4526))::numeric, 2) as area from t_build_polygon;

在这里插入图片描述

安装完成。

END

Thanks for Reading!

作者:iCrystal
邮箱:leopard.c@outlook.com
博客:https://blog.icrystal.top
GitHub: https://github.com/Leopard-C

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值