当前位置: 首页 > article >正文

postgresql|数据库|postgis编译完成后的插件迁移应该如何做(postgis插件最终章)

一、

本文的写作理由

postgis插件一般是编译安装,编译安装的原因是可以选择自己喜欢的版本,但编译的难度也是比较高的,因为有各种依赖,依赖之间还有依赖,非常容易形成依赖循环,因此,失败率是比较高的

🆗,那么,假如我们有一组数据库服务器,都需要安装postgis插件,那么,是不是需要每台服务器都安装呢?比如,A,B,C三台数据库服务器,每个服务器上跑一个数据库实例的情况下

显然的,如果这一组服务器硬件配置基本一样,那么,我们应该是只需要编译在一台服务器上编译好postgis插件就可以了,剩下的postgis插件直接迁移过去就可以了,这也体现了 一次编译,随处运行的好处

比如,A,B,C 三个服务器都安装了postgresql12,但A服务器小版本是postgresql12.4,B服务器小版本是postgresql12.18,C服务器小版本是postgresql12.12,服务器都是centos7操作系统,服务器的硬件架构都是统一的x86_64,假设在A服务器上已经编译好了postgis3.4.3版本,那么,如何将编译好的postgis迁移到B和C服务器呢?

这里需要说明一下,postgis可以跨postgresql数据库的小版本但不可以跨大版本

下面我将以centos7的x86_64架构下的postgresql-12版本的postgis-3.4.3插件迁移做一个详细的说明

二、

相关迁移文件下载地址:

通过网盘分享的文件:postgis-3.4.3_pg12迁移
链接: https://pan.baidu.com/s/1H0wowsnmhxwR8hw7dfR6QQ?pwd=s8c7 提取码: s8c7 
--来自百度网盘超级会员v6的分享

这里面都是postgis-3.4.3运行需要的各种依赖库文件,主要是一些so文件,已整理完成,可适用于所有pg12版本,也就是不细分小版本

三、

实验过程

1、

数据库的安装(简单记录)

yum install postgresql12-server-12.4 postgresql12-libs-12.4 postgresql12-devel-12.4 postgresql12-contrib-12.4 postgresql12-tcl postgresql12-odbc postgresql12-12.4  postgresql12-plperl-12.4 postgresql12-pltcl-12.4 postgresql12-plpython-12.4  postgresql12-plpython3-12.4 postgresql12-llvmjit-12.4 postgresql12-devel-12.4   -y

写入/etc/profile文件末尾:

PGDATA=/data/pgsql/data
export PGDATA
PGHOME=/data/pgsql
export PGHOME
PATH=$PATH:$PGHOME/bin:$PGDATA:/usr/pgsql-12/bin/
export PATH  PGHOME PGDATA

postgres用户的环境变量修改:主要是PGDATA=/data/pgsql/data,其它不需要修改

 cat /var/lib/pgsql/.bash_profile 
[ -f /etc/profile ] && source /etc/profile
PGDATA=/data/pgsql/data
export PGDATA
# If you want to customize your settings,
# Use the file below. This is not overridden
# by the RPMS.
[ -f /var/lib/pgsql/.pgsql_profile ] && source /var/lib/pgsql/.pgsql_profile

创建自定义数据库的数据目录并赋权 

mkdir -p /data/pgsql/
chown -Rf postgres. /data/pgsql

 数据库启动脚本修改:

/usr/lib/systemd/system/postgresql-12.service
Environment=PGDATA=/var/lib/pgsql/12/data/
修改为
Environment=PGDATA=/data/pgsql/data/

 初始化postgresql12数据库,并修改pg数据库的启动脚本名称,以方便使用:

/usr/pgsql-12/bin/postgresql-12-setup initdb
mv /usr/lib/systemd/system/postgresql-12.service /usr/lib/systemd/system/pg12.service

 启动数据库

systemctl enable pg12
systemctl start pg12

2、ld文件搜寻配置

cat >/etc/ld.so.conf<<EOF
/usr/proj63/lib
/usr/local/lib64/
/usr/local/sfcgal/lib64/
/usr/gdal33/lib/
/usr/local/protobuf-c/lib
/usr/geos39/lib64/
/usr/ogdi41/lib/
/usr/libgeotiff17/lib/
/usr/pgsql-12/lib/
/usr/proj72/lib/
/usr/libspatialite43/lib/
/usr/lib64/mysql/
EOF

 等下面步骤完成后,在运行ldconfig命令,以上所有命令都是在root下完成,不要切普通用户postgres

3、

解压所有压缩包

for i in `ls ./*.tar.gz` ;do tar xvf $i;done

4、

迁移文件的对应的放置位置

#备份数据库的插件目录
mv /usr/pgsql-12/share/extension{,.bak}
#使用编译好的正常可用的插件目录
mv /root/extension /usr/pgsql-12/share/
#备份数据库的lib目录
cp /usr/pgsql-12/lib{,.bak}
#移动编译好的postgis相关依赖库文件到系统依赖库
\cp -arf /root/usr/local/lib64/* /usr/local/lib64/
#移动postgis插件相关关键依赖,已编译好的
mv /root/usr/proj63 /usr/
mv /root/usr/proj72 /usr/
mv /root/usr/gdal33 /usr/
mv /root/usr/libgeotiff17 /usr/
mv /root/usr/libspatialite43 /usr/
mv /root/usr/ogdi41  /usr/
mv /root/usr/local/protobuf-c/ /usr/local/
mv /root/usr/local/sfcgal /usr/local/
#备份postgresql的关键依赖
mv /usr/pgsql-12/lib/bitcode{,.bak}
#pg数据库需要的依赖移动
mv -f /root/usr/pgsql-12/lib/bitcode /usr/pgsql-12/lib/
#所有postgis插件的so文件,这一步完成就可以在postgresql数据库内看到扩展列表了,但还没有激活
\cp -rvf usr/pgsql-12/lib/postgis* /usr/pgsql-12/lib/
#postgis插件的关键依赖so文件,这些文件是我一个个实验出来的
cp /root/usr/lib64/libpoppler.so.46 /usr/lib64/
cp /root/usr/lib64/libfreexl.so.1 /usr/lib64/
cp /root/usr/lib64/libwebp.so.4 /usr/lib64/
cp /root/usr/lib64/libxerces-c-3.1.so /usr/lib64/
cp /root/usr/lib64/libopenjp2.so.7 /usr/lib64/
cp /root/usr/lib64/libjasper.so.1 /usr/lib64/
cp /root/usr/lib64/libnetcdf.so.7 /usr/lib64/
cp /root/usr/lib64/libhdf5.so.8 /usr/lib64/
cp /root/usr/lib64/libgif.so.4  /usr/lib64/
cp /root/usr/lib64/libCharLS.so.1  /usr/lib64/
cp /root/usr/lib64/libgta.so.0  /usr/lib64/
cp /root/usr/lib64/libcfitsio.so.2  /usr/lib64/
cp /root/usr/lib64/libzstd.so.1  /usr/lib64/
cp /root/usr/lib64/libtiff.so.5  /usr/lib64/
cp /root/usr/lib64/libjpeg.so.62  /usr/lib64/
cp /root/usr/lib64/libdapclient.so.6  /usr/lib64/
cp /root/usr/lib64/libdapclient.so.7  /usr/lib64/
cp /root/usr/lib64/libdapserver.so.7  /usr/lib64/
cp /root/usr/lib64/libdap.so.17  /usr/lib64/
cp /root/usr/lib64/liblcms2.so.2  /usr/lib64/
cp /root/usr/lib64/libopenjpeg.so.1  /usr/lib64/
cp /root/usr/lib64/libfontconfig.so.1  /usr/lib64/
cp /root/usr/lib64/libhdf5_hl.so.8  /usr/lib64/
cp /root/usr/lib64/libsz.so.2  /usr/lib64/
cp /root/usr/lib64/libSM.so.6  /usr/lib64/
cp /root/usr/lib64/libICE.so.6  /usr/lib64/
cp /root/usr/lib64/libjbig.so.2.0  /usr/lib64/
cp /root/usr/lib64/libaec.so.0  /usr/lib64/
cp /root/usr/lib64/libX11.so.6  /usr/lib64/
cp /root/usr/lib64/libxcb.so.1  /usr/lib64/
cp /root/usr/lib64/libXau.so.6  /usr/lib64/
cp  usr/pgsql-12/lib/address_standardizer-3.so /usr/pgsql-12/lib/
cp boost/* /usr/lib64/
#解决ldconfig命令的报错
mv /lib64/libboost_locale-mt.so.1.53.0 /lib64/libboost_locale-mt.so.1
ln -sf /lib64/libboost_locale-mt.so.1 /lib64/libboost_locale-mt.so.1.53.0
mv /lib64/libboost_atomic-mt.so.1.53.0 /lib64/libboost_atomic-mt.so.1
ln -sf /lib64/libboost_atomic-mt.so.1 /lib64/libboost_atomic-mt.so.1.53.0

最终postgis相关的插件应该是7个,如下所示:

postgres=# \dx
                                                                       List of installed extensions
             Name             | Version |   Schema   |                                                     Description                                                     
------------------------------+---------+------------+---------------------------------------------------------------------------------------------------------------------
 address_standardizer         | 3.4.3   | public     | Used to parse an address into constituent elements. Generally used to support geocoding address normalization step.
 address_standardizer_data_us | 3.4.3   | public     | Address Standardizer US dataset example
 fuzzystrmatch                | 1.1     | public     | determine similarities and distance between strings
 plpgsql                      | 1.0     | pg_catalog | PL/pgSQL procedural language
 postgis                      | 3.4.3   | public     | PostGIS geometry and geography spatial types and functions
 postgis_raster               | 3.4.3   | public     | PostGIS raster types and functions
 postgis_tiger_geocoder       | 3.4.3   | tiger      | PostGIS tiger geocoder and reverse geocoder
 postgis_topology             | 3.4.3   | topology   | PostGIS topology spatial types and functions
(8 rows)

 

 

四、

常见错误处理

1、激活插件的时候报undefined symbol

postgres=# create extension postgis;
ERROR:  could not load library "/usr/pgsql-12/lib/plpgsql.so": /usr/pgsql-12/lib/plpgsql.so: undefined symbol: EnsurePortalSnapshotExists

分析和解决:这个是激活postgis的时候遇到的,plpgsql.so 是pg数据库的最基本插件,那么,此报错表示的是版本不匹配,哪个版本呢?pg数据库的lib库版本不匹配,说简单点,比如,pg12.4和pg12.18  pg12.4用了pg12.18的lib,就会报这个错误,很简单,恢复lib库就可以了,也就是cp /usr/pgsql-12/lib{,.bak}  这个命令如果换成mv,那么需要恢复lib库,使用自己版本的就可以消除此错误了

2、

could not load library "/usr/pgsql-12/lib/postgis_raster-3.so"

postgres=# create extension postgis_raster ;
ERROR:  could not load library "/usr/pgsql-12/lib/postgis_raster-3.so": libmysqlclient.so.18: cannot open shared object file: No such file or directory

分析和解决:

这个就比较简单了,在激活光栅插件的时候,找不到mysqlclient.so18 文件,find命令查找,可以发现此文件是存在的,在/usr/lib64/mysql 目录下的,因此,将此文件假如ld搜寻路径,也就是在/etc/ld.so.conf 文件内写入此路径告诉系统动态链接库在此路径下寻找就可以了

3、

server closed the connection unexpectedly

postgres=# create extension postgis_raster ;
server closed the connection unexpectedly
	This probably means the server terminated abnormally
	before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.

分析和解决:

这个错误也比较好解决,此错误是插件激活是有顺序的,虽然postgis_raster 这个插件已经有所有的动态链接库了,但它还依赖其它两个插件,因此,先激活其它插件,最后在激活此插件就可以了,其它两个插件是指的postgis_tiger_geocoder和postgis_topology

正确的激活顺序如下:

postgres=# create extension postgis;
CREATE EXTENSION
postgres=# create extension postgis_tiger_geocoder cascade;
NOTICE:  installing required extension "fuzzystrmatch"
CREATE EXTENSION
postgres=# create extension postgis_topology ;
CREATE EXTENSION
postgres=# create extension postgis_raster ;
CREATE EXTENSION
postgres=# create extension address_standardizer;
CREATE EXTENSION
postgres=# create extension address_standardizer_data_us ;
CREATE EXTENSION


http://www.kler.cn/news/336522.html

相关文章:

  • JavaEE: 深入解析HTTP协议的奥秘(1)
  • Python库pandas之六
  • 滚雪球学Oracle[3.2讲]:查询与数据操作基础
  • Android广播
  • 深入掌握 Golang 单元测试与性能测试:从零开始打造高质量代码!
  • 公开且免费的天气查询API
  • idea远程连接docker
  • 高级java每日一道面试题-2024年10月1日-服务器篇[Redis篇]-Redis数据结构压缩列表和跳跃表的区别?
  • 自闭症寄宿学校陕西:提供综合发展的教育环境
  • 确保接口安全:六大方案有效解决幂等性问题
  • 旅游行业解决方案:基于SpringBoot的系统开发
  • 自动驾驶系列—全面解析自动驾驶线控制动技术:智能驾驶的关键执行器
  • IDEA创建、导入、删除maven项目
  • Linux·环境变量与进程地址空间
  • 制造业该如何应用大数据?
  • 【C++并发入门】opencv摄像头帧率计算和多线程相机读取(下):完整代码实现
  • vue2和vue3全面对比
  • 网页也能跑大模型?看这一篇就够了
  • 路由器WAN口和LAN口的区别
  • 学生生涯决策风格测评