Postgresql 12.2 + PostGIS 3.0.1 数据库环境部署

371 阅读4分钟

1. 环境说明

该套环境是用来适配ArcGIS 10.8.1 和 ArcGIS Pro 2.6。

名称版本相关依赖
操作系统centos7.6
postgresql12.2zlib-devel readline-devel
postgis3.0.1gcc g++
GEOS3.8.0
sqlite33.32.2
PROJ6.3.1
protubuf3.15.3
protubuf-c1.3.3
json-c0.13.1
CMake3.16.8openssl openssl-devel
CGAL4.14.3gmp-devel boost-devel mpfr-devel zlib-devel libxml2-devel
SFCGAL1.3.7
GDAL3.0.4
pcre8.45

PostgreSQL: PostGIS构建于PostgreSQL之上,所以PostgreSQL必须要安装。

GNU C 编译器(gcc): gcc是一个Linux中最标准的C语言编译器,需要安装gcc来编译PostGIS和其他软件或函数库的源码。

GNU Make(gmake或make): 这个也是用于编译源码。

Proj4: Proj4 重投影库用于在PostGIS中提供坐标重投影功能。

GEOS: GEOS几何图形库,用于支持PostGIS中的几何信息处理、分析等功能,也可以直接认为GEOS是一个几何算法库。

LibXML2: LibXML2目前用于PostGIS中的一些导入函数,比如ST_GeomFromGML()和ST_GeomFromKML()。

JSON-C: 目前使用JSON-C通过ST_GeomFromGeoJSON()函数导入GeoJSON格式的数据。

GDAL: 用于PostGIS对栅格数据的支持。

SFCGAL: 用于PostGIS对三维数据的支持。

PostGIS: PostgreSQL的空间数据、空间索引和空间函数的扩展。

2. 注意事项

  1. 除了几个主要的组件外,能用YUM安装的就使用YUM安装。
  2. 本地编译安装的过程中最好不要指定安装路径,使用默认路径/usr/local,防止安装完成后找不到共享库和可执行文件。
  3. 环境变量和共享库修改后,一定要及时刷新和重新加载。
  4. 如果遇到已经配置好变量和共享库后,编译安装时仍然读不到共享库的情况,可以尝试关闭ssh会话重新连接服务器。
  5. 安装时严格按照指定版本进行安装,版本参数参考PostGIS官方说明。

3. Postgresql 12.2 安装

3.1.安装基础库

yum -y install zlib-devel readline-devel

3.2. 创建系统用户

root用户执行以下命令

# 创建 postgres 用户
adduser postgres

# 给 postgres 用户设置密码
passwd postgres

3.3.下载安装包

下载地址: ftp.postgresql.org/pub/source/…

3.4. 解压编译安装

# 切换为postgres用户
su - postgres

# 进入安装包所在文件夹
cd /home/postgres/software

# 解压安装包
tar -xzvf postgresql-12.2.tar.gz 

# 进入解压后的安装包
cd postgresql-12.2

# 进行编译检查,设置安装目录为/home/postgres
./configure --prefix=/home/postgres --with-libxml

# ./configure无误后,执行编译安装
make
make install

3.5. 环境变量配置

如果需要在任意环境下都能使用 postgresql 相关命令,则需要把 $PGHOME/bin 中的内容都加入PATH环境变量,编辑 /etc/profile 文件。 如果只是在postgres用户下使用,则需要编辑 /home/postgres/.bash_profile 文件。

vi /etc/profile
# 在最后追加以下内容
export PGHOME=/home/postgres
export PATH=$PGHOME/bin:$PATH
# 如果需要设置一个单独的目录作为数据库目录,则需要明确指定PGDATA环境变量,且该文件夹的owner必须为postgres用户
export PGDATA=/home/postgres/data

若需要环境变量立即生效,则执行以下命令

source /etc/profile
source /home/postgres/.bash_profile

3.6. 初始化数据目录

初始化数据库目录(单实例) 若配置好PG的bin目录为环境变量后,直接针对目标数据库执行以下命令 (令数据库目录为 /home/postgres/data)

initdb -D /home/postgres/data

若有调整WAL日志大小的需求(主要用于归档、主从配置的优化,一旦initdb初始化指定后,不可修改),则可以执行以下命令(非必要),–wal-segsize的单位为MB initdb -D /data/pgdata --wal-segsize=128

3.7. 配置远程登录

1.编辑 pg_hba.conf 文件

vi /home/postgres/data/pg_hba.conf

host all all 0.0.0.0/0 md5 添加到文件中,代表所有的用户通过任意 ip 都可以通过md5(密码)的方式登陆PostgreSQL。如下图所示:

host all all 0.0.0.0/0 md5 

1667205264930.png 2.编辑 postgresql.conf 文件

vi /home/postgres/data/postgresql.conf

修改listen_addresses为*,如下图所示:

1667205463844.png

3.8. 配置系统服务

1.创建postgresql.service文件

vi /usr/lib/systemd/system/postgresql.service

写入

[Unit]
Description=PostgreSQL database server
After=network.target
[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGPORT=5432
Environment=PGDATA=/home/postgres/data
OOMScoreAdjust=-1000
ExecStart=/home/postgres/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/home/postgres/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/home/postgres/bin/pg_ctl reload -D ${PGDATA} -s
TimeoutSec=300
[Install]
WantedBy=multi-user.target

2.控制命令

systemctl daemon-reload      # 启用服务控制守护
systemctl start postgresql   # 启动
systemctl stop postgresql    # 停止
systemctl restart postgresql # 重启
systemctl enable postgresql  # 开机自启
systemctl staus postgresql   # 查看状态

3.9. 设置数据库用户密码

# 切换到postgres用户
su - postgres 
# 直接用postgres超级用户登录,默认不需要密码,psql直接回车就以postgres用户进入了postgres数据库
psql -U postgres
# 修改超级用户密码为:postgres
alter role postgres with password 'postgres';
# 退出
\q

3.10. 远程连接测试

通过 Navicat 连接访问

1667206337975.png 成功连接如下

1667206305004.png

4. PostGIS 3.0.1 安装

**注意:**先安装gcc 、gcc-c++,其他组件的依赖其进行编译安装.

yum install -y gcc gcc-c++

版本查看

gcc --version
g++ --version

4.1. GEOS 编译安装

下载地址: download.osgeo.org/geos/geos-3…

1.安装命令

tar -jxvf geos-3.8.0.tar.bz2
cd geos-3.8.0
./configure
make
make install

2.测试

geos-config --version

1667357992629.png

4.2. PROJ 编译安装

注意: proj6.3.2依赖于sqlite3,且sqlite3的版本要 ≥ 3.11,系统yum安装的sqlite3版版是3.7的,所以要对sqlite3进行升级。

4.2.1. 升级 sqlite3

下载地址: www.sqlite.org/2020/sqlite…

1.yum 安装

yum -y install sqlite sqlite-devel

2.编译安装

tar zxvf sqlite-autoconf-3320200.tar.gz
cd sqlite-autoconf-3320200/ 
./configure --prefix=/usr/local/sqlite
make
make install

3.环境配置

vi /etc/profile
# 在最后面追加以下内容
export SQLITE3=/usr/local/sqlite
export PATH=$SQLITE3/bin:$PATH
export PKG_CONFIG_PATH=/usr/local/sqlite/lib/pkgconfig

# 刷新
source /etc/profile

4.替换版本

cp /usr/local/sqlite/bin/sqlite3 /usr/bin/

5.测试

sqlite3 --version

1667358021184.png

4.2.2. 安装 proj

下载地址: download.osgeo.org/proj/proj-6…

1.安装命令

tar -zxvf proj-6.3.1.tar.gz
cd proj-6.3.1
./configure
make
make install

安装成功如下:

1667457875305.png

2.测试

proj

1667458746908.png

4.3. Protubuf-c 编译安装

说明: protobuf-c依赖protobuf,所以先安装protobuf。

4.3.1. 安装 protubuf

下载地址: github.com/protocolbuf…

1.安装命令

tar -zxvf protobuf-all-3.15.3.tar.gz
cd protobuf-3.15.3
./configure
make
make install

安装成功如下:

1667443120911.png

2.环境配置

vi /etc/profile
# 最后面追加以下内容
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

# 刷新
source /etc/profile

3.测试

protoc --version

1667272425983.png

4.3.2. 安装 protobuf-c

下载地址: github.com/protobuf-c/…

1.安装命令

tar -zxvf protobuf-c-1.3.3.tar.gz
cd protobuf-c-1.3.3
./configure
make
make install

安装成功如下:

1667445190100.png 2.测试

protoc-c --version

1667272486125.png

4.4. Json-c 编译安装

下载地址: codeload.github.com/json-c/json…

安装命令

tar -zxvf json-c-json-c-0.13.1-20180305.tar.gz
cd json-c-json-c-0.13.1-20180305/
./configure
make
make install

安装成功如下:

1667445483087.png

4.5. SFCGAL 编译安装

说明: 由于PostGIS对应的版本比较新,因此CentOS 7默认的CMake版本不足,需要编译安装新版本的CMake。

4.5.1. 安装 CMake

下载地址: github.com/Kitware/CMa…

1.安装openssl相关库

yum -y install openssl openssl-devel

2.安装命令

tar -zxvf cmake-3.16.8.tar.gz
cd cmake-3.16.8
./bootstrap
gmake
make install

安装成功如下:

1667447645071.png

3.测试

cmake --version

1667271119312.png

4.5.2. 安装 CGAL

说明: sfcgal、pgRouting(网络分析)都依赖boost、cgal,可能会出现boost、cgal安装编译都成功,就是无法编译sfcgal,或者编译好了pgrouting却无法使用。原因就是boost、cgal的问题,只要记住一点,只安装到默认路径,不要指定路径。

下载地址: github.com/CGAL/cgal/r…

1.安装相关依赖库

yum -y install gmp-devel boost-devel mpfr-devel zlib-devel libxml2-devel

2.安装命令

tar -xvf CGAL-4.14.3.tar.xz
cd CGAL-4.14.3
mkdir build && cd build
cmake ..
make
make install

安装成功如下:

1667438232356.png

4.5.3. 安装 SFCGAL

下载地址: codeload.github.com/Oslandia/SF…

1.安装命令

tar -zxvf SFCGAL-1.3.7.tar.gz
cd SFCGAL-1.3.7  
mkdir build && cd build
cmake .. 
make
make install

安装成功如下:

1667384227901.png

安装完成后,需要配置软链接到libSFCGAL.so,防止后续gdal安装找不到

ln -s /usr/local/lib64/libSFCGAL.so /usr/local/lib/libSFCGAL.so
ln -s /usr/local/lib64/libSFCGAL.so.1 /usr/local/lib/libSFCGAL.so.1

4.6. GDAL 编译安装

下载地址: download.osgeo.org/gdal/3.0.4/…

1.安装命令

tar -zxvf gdal-3.0.4.tar.gz 
cd gdal-3.0.4 
./configure
make
make install

安装成功如下:

1667446933241.png

2.测试

gdal-config --version

1667359143567.png

4.7. Pcre 编译安装

下载地址: downloads.sourceforge.net/project/pcr…

1.安装命令

tar -zxvf pcre-8.45.tar.gz 
cd pcre-8.45
./configure 
make
make install

安装成功如下:

1667454590073.png

2.测试

pcre-config --version

1667454621695.png

4.8. PostGIS 编译安装

下载地址: download.osgeo.org/postgis/sou…

1.安装命令

tar -zxvf postgis-3.0.1.tar.gz
cd postgis-3.0.1
./configure --with-pgconfig=/home/postgres/bin/pg_config
make
make install

安装成功如下:

1667455148672.png 2.环境配置

vi /etc/ld.so.conf
# 在最后面追加以下内容
/home/postgres/lib
/usr/local/lib
/usr/local/lib64

# 重新加载
ldconfig

3.测试 3.1 切换postgres用户

su - postgres

3.2 登录数据库

psql -p 5432 -d postgres -U postgres -W

3.3 创建一个测试库

create datebase test;

3.4 进入测试库,创建拓展

# 进入测试库
\c test;
# 创建postgis扩展
create extension postgis;

# 验证栅格类数据需要的raster扩展
create extension postgis_raster;

# 如果安装带有sfcgal,验证下三维sfcgal扩展
create extension postgis_sfcgal;

1667462964915.png

3.5 查看postgresql和postgis版本

select  VERSION();
select * from pg_available_extensions WHERE name like 'postgis';

1667462909670.png