# 写在前面
本文衔接上一篇文章:
从零开始搭建WebGIS网站(三)-PG数据库准备-CSDN博客https://blog.csdn.net/m0_50917429/article/details/138450428
本文主要介绍在阿里云 Ubuntu 服务器上的 Postgresql 数据库中安装空间数据管理的插件 PostGIS 和 PgRouting,同时介绍一下空间数据在 PG 数据库中的导入导出过程。这一步相较于先前几步十分繁琐,主要参考的几篇文章有很多细节问题,这里列一下参考的几篇博客/文章:
- PostGIS 安装:文章很多关键库并非最新版本,参考安装最新版本未能成功。
- PgRouting 安装:官网安装教程,安装需注意增加小细节否则安装失败。
- 数据导入导出:数据顺利导出,但导出存储过程函数需要参考另一篇博文。
1 PostGIS 安装
首先赋予 postgres 用户超级用户的权限,便于后续安装软件到指定目录:
# 在root用户下修改postgres用户密码
passwd postgres
# 将postgres加入超级用户组
grep '^sudo:' /etc/group && adduser postgres sudo
# 切换到postgres用户,同时验证是否具有sudo权限
su postgres && sudo ll /root
随后安装一系列依赖库,首先是一些用 apt 可以快速便捷自动安装的,这样的安装方式不能保证安装库是最新的,但是是最省时省力的,否则参考博文一个个手动安装会让你怀疑人生:
sudo apt-get update && sudo apt-get install libxml2 && sudo apt-get install libxml2-dev && sudo apt-get install libgdal-dev
然后是手动安装最新版的 protobuf 和 protobuf-c,参考如下:
# 下载安装包同时解压
wget https://github.com/protocolbuffers/protobuf/releases/download/v26.1/protobuf-26.1.tar.gz
tar -zxvf protobuf-26.1.tar.gz
# 编译安装包,如果编译环境没准备好请参考连载第三篇文章,时间可能较长
cd protobuf-3.20.3 && ./configure && make
# 安装到默认路径下,同时更新各种链接库
sudo make install && sudo ldconfig
# 查看protoc版本,查看成功即安装成功
protoc --version
# protobuf-c是额外的几个链接库,安装过程同上
wget https://github.com/protobuf-c/protobuf-c/releases/download/v1.5.0/protobuf-c-1.5.0.tar.gz
tar -zxvf protobuf-c-1.5.0.tar.gz
cd protobuf-c-1.5.0 && ./configure && make
sudo make install && sudo ldconfig
正式安装 PostGIS 插件,参考如下:
# 下载安装包同时解压
wget https://download.osgeo.org/postgis/source/postgis-3.4.2.tar.gz
tar -zxvf postgis-3.4.2.tar.gz
# 编译安装包,需要指定PG数据库位置,同时更改安装路径到/pgsql/postgis/
./configure --prefix=/pgsql/postgis/ --with-pgconfig=/pgsql/postgresql/bin/pg_config && make
# 使用root权限进行安装,安装成功后会产生/pgsql/postgis/文件夹
sudo make install
如果你没有报任何错误,那么恭喜你已经成功了一大半了,这个时候进入数据库安装 postgis 插件,参考如下:
# 登入PG数据库,为了方便可以通过在~/.bashrc中声明alias psql='psql -p 6543'
psql -p 6543
# 安装两个插件,如果不报错则说明postgis安装成功!!!
create extension postgis;
create extension postgis_raster;
2 PgRouting 安装
参考官网安装教程,需要注意在编译的时候加入参数指定PG数据库的位置,参考如下:
# 下载安装包同时编译安装包
wget -O pgrouting-3.6.2.tar.gz https://github.com/pgRouting/pgrouting/archive/v3.6.2.tar.gz
cd pgrouting-3.6.2
mkdir build && cd build
# 没有安装cmake使用apt-get install安装,需要指定PG数据库位置,同时指定安装路径
cmake -DCMAKE_INSTALL_PREFIX=/pgsql/pgrouting -DPOSTGRESQL_PG_CONFIG=/pgsql/postgresql/bin/pg_config .. && make
sudo make install
# psql -p 6543 登录PG数据库,添加插件
CREATE EXTENSION pgRouting;
3 导出表以及存储过程
切换到 postgres 用户下,使用 pg_dump 导出数据,示例入下(在不指定数据库名称时默认是用户同名的数据库):
# 导出postgres数据库中的一系列表
pg_dump -U postgres -p 6543 -t public.cities_4326 > ~/dump_cities_4326.sql
pg_dump -U postgres -p 6543 -t public.footprints > ~/dump_footprints.sql
pg_dump -U postgres -p 6543 -t public.province_4326 > ~/dump_province.sql
pg_dump -U postgres -p 6543 -t public.wuhan_roads_3857 > ~/dump_wuhan_roads_3857.sql
pg_dump -U postgres -p 6543 -t public.wuhan_roads_3857_vertices_pgr > ~/dump_wuhan_roads_3857_vertices_pgr.sql
pg_dump -U postgres -p 6543 -t public.logins > ~/dump_logins.sql
# 导出wuhan_reviews整个数据库
pg_dump -U postgres -p 6543 wuhan_reviews > wuchan_reviews.sql
导出存储过程相对比较麻烦,需要三个步骤:
# 首先导出整个名为postgres的数据库到~/postgres.dmp
pg_dump -U postgres -p 6543 postgres -Fc -v -s -f ~/postgres.dmp
# 使用关键字FUNCTION过滤出存储过程函数列表
pg_restore -l ~/postgres.dmp | grep FUNCTION > ~/funcion_list
# 导出相关函数创建的sql语句
pg_restore -L ~/funcion_list ~/postgres.dmp > ~/function_list.sql
因为我自己写了部分存储过程,可以直接查看~/function_list.sql把相关存储过程的创建语句提取出来,然后手动在新的数据库中创建。
4 导入数据到新数据库
存储过程需要手动创建,这里仅展示整个数据库wuhan_reviews和一些表的导入过程:
# 导入表到postgres用户的postgres数据库中
psql -U postgres -p 6543 < dump_cities_4326.sql
psql -U postgres -p 6543 < dump_footprints.sql
psql -U postgres -p 6543 < dump_province.sql
psql -U postgres -p 6543 < dump_wuhan_roads_3857.sql
psql -U postgres -p 6543 < dump_wuhan_roads_3857_vertices_pgr.sql
psql -U postgres -p 6543 < dump_logins.sql
# 导入整个数据库给postgres用户
psql -U postgres -p 6543 wuhan_reviews < wuhan_reviews.sql