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=# \dxList of installed extensionsName             | 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 examplefuzzystrmatch                | 1.1     | public     | determine similarities and distance between stringsplpgsql                      | 1.0     | pg_catalog | PL/pgSQL procedural languagepostgis                      | 3.4.3   | public     | PostGIS geometry and geography spatial types and functionspostgis_raster               | 3.4.3   | public     | PostGIS raster types and functionspostgis_tiger_geocoder       | 3.4.3   | tiger      | PostGIS tiger geocoder and reverse geocoderpostgis_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 unexpectedlyThis probably means the server terminated abnormallybefore 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.rhkb.cn/news/439336.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

libevent框架、带缓冲区事件bufferevent的使用

1.简介 特点 源码包安装 2.libevent框架 创建event_base 创建添加事件 循环监听事件满足 释放event_base 相关函数了解 3.常规事件event 未决与非未决 使用fifo的读写 4.带缓冲区事件bufferevent bufferevent A.服务器创建监听器 C.给读写缓冲区设置回调 D.禁用…

基于spring boot的篮球论坛系统

作者&#xff1a;计算机搬砖家 开发技术&#xff1a;SpringBoot、php、Python、小程序、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;Java精选实战项…

【Unity踩坑】使用内购时获取Google Play license key

在Unity中使用了IAP&#xff08;内购&#xff09;后&#xff0c;需要设置Google Play license key。 这个key需要在Google Play Console中&#xff08;https://play.google.com/console&#xff09;&#xff0c;找到相应的应用&#xff0c;在左侧“创收设置”里可以找到license…

电脑失声,一招搞定

早已习惯了Edge浏览器的“大声朗读”功能&#xff0c;今天值班&#xff0c;值班室用的两台电脑只配有耳机&#xff0c;没有音箱&#xff0c;顿时感觉不适。 先找了一个带功放的老音箱&#xff0c;发现少了电箱到功放的音频线。 一顿搜索&#xff0c;在找到音频线的同时&#…

Linux·进程概念(下)

1. 进程优先级 优先级就是获得某种资源的先后顺序&#xff0c;因为CPU资源是有限的&#xff0c;因此各个进程之间要去争取CPU的资源。 那么针对Linux操作系统下的PCB中&#xff0c;也就是task_struct结构体中&#xff0c;使用了int类型的变量记录了每个进程的优先级属性&#x…

【Xcode Command Line Tools】安装指南

安装指令 xcode-select --install安装 完成安装 验证 $ xcode-select -p /Library/Developer/CommandLineTools

Python机器视觉:01- 利用列表和切片操作 - 做一个弧线和图片相交的mask区域

前言&#xff1a; Python的列表处理&#xff0c;在机器视觉中经常被用到&#xff0c;这里结合基本的概念机器视觉实践案例&#xff0c;成文如下&#xff1a; 本身将实现一个&#xff0c;弧线的mask填充&#xff1a;这个mask是我的一个天文项目的应用&#xff0c;目的在于将月…

(笔记)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第2关---8G 显存玩转书生大模型 Demo

学员闯关手册&#xff1a;https://aicarrier.feishu.cn/wiki/ZcgkwqteZi9s4ZkYr0Gcayg1n1g?open_in_browsertrue 课程视频&#xff1a;https://www.bilibili.com/video/BV18x4y147SU/ 课程文档&#xff1a; https://github.com/InternLM/Tutorial/blob/camp3/docs/L1/Demo/rea…

基于Zynq SDIO WiFi移植三(支持2.4/5G)

应用问题-WIFI作为AP-hostapd多次连接 设备作为WIFI热点时&#xff0c;连接出现了下述问题&#xff1a; 1 手机连接需要三次&#xff0c;三次都需要输入密码&#xff1b; 2 平板连接需要三次&#xff0c;三次都需要输入密码&#xff1b; 3 电脑连接需要一次&#xff0c;无感…

24个AI写作秘技,助你写出震撼人心的佳作!

最近&#xff0c;许多朋友开始尝试使用AI进行写作。然而&#xff0c;他们创作的文章常常显得语言过于正式&#xff0c;不仅缺乏沉浸感&#xff0c;发送后也很容易被系统检测出重复内容。我一直强调&#xff0c;在写作过程中&#xff0c;我们不应完全依赖AI。AI只是一种工具&…

[ComfyUI]Flux:超美3D微观山水禅意,经典中文元素AI重现,佛陀楼阁山水画卷

在数字艺术和创意领域&#xff0c;[ComfyUI]Flux以其独特的虚实结合技术&#xff0c;已经成为艺术家和设计师们手中的利器。今天&#xff0c;我们激动地宣布&#xff0c;[ComfyUI]Flux带来了一款超美的3D微观山水禅意作品&#xff0c;经典中文元素通过AI技术重现&#xff0c;包…

RabbitMQ(死信队列)

一、本文抒写背景 前面我也在延迟队列篇章提到过死信队列&#xff0c;也提到过一些应用场景&#xff01; 今天呢&#xff0c;这篇文章&#xff0c;主要就是实战一个业务场景的小Demo流程&#xff0c;哈哈&#xff0c;那就是延迟关闭订单。 二、开始啦&#xff01;letgo! 首…

No.0 笔记 | 从小白到入门:我的渗透测试笔记

嘿&#xff0c;小伙伴们&#xff01;好久不见啊&#xff0c;是不是都以为我失踪了&#xff1f;&#x1f602; 其实呢&#xff0c;最近一直在埋头苦学&#xff0c;感觉自己就像是在技术的海洋里游泳&#xff0c;每天都在吸收新知识。现在终于有时间冒个泡&#xff0c;跟大家分享…

小红书制作视频如何去原视频音乐,视频如何去原声保留背景音乐?

在视频编辑、音乐制作或个人娱乐中&#xff0c;有时我们希望去掉视频中的原声&#xff08;如对话、解说等&#xff09;&#xff0c;仅保留背景音乐。这种处理能让观众更加聚焦于视频的氛围或节奏&#xff0c;同时也为创作者提供了更多创意空间。选择恰当的背景音乐&#xff0c;…

【记录】Excel|Excel 打印成 PDF 页数太多怎么办

【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题 文章目录 【记录】Excel&#xff5c;解决 Excel 打印成 PDF 页数过多的问题方法一&#xff1a;调整页边距WPS OfficeMicrosoft Excel 方法二&#xff1a;优化页面布局调整列宽和行高使用“页面布局”视图合并单…

小程序-使用npm包

目录 Vant Weapp 安装 Vant 组件库 使用 Vant 组件 定制全局主题样式 API Promise化 1. 基于回调函数的异步 API 的缺点 2. 什么是 API Promise 化 3. 实现 API Promise 化 4.调用 Promise 化之后的异步 API 小程序对 npm 的支持与限制 目前&#xff0c;小程序中已经…

BUSHOUND的抓包使用详解

BUSHOUND是个过滤软件&#xff0c;确切来说是在windows操作系统它的驱动层USB传输的数据。所以这个数据上可能是与USB的总线上的数据是有一点差异的。 先要选择设备的抓包。所以就是在device这个界面底下&#xff0c;我们首先要选择我们要抓的设备。 尝试下键盘设备 电脑键盘…

dll动态库加载失败导致程序启动报错以及dll库加载失败的常见原因分析与总结

目录 1、问题说明 2、dll库的隐式加载与动态加载 2.1、dll库的隐式加载 2.2、dll库的显式加载 3、使用Process Explorer查看进程加载的dll库信息以及动态加载的dll库有没有加载成功 3.1、使用Process Explorer查看进程加载的dll库信息 3.2、使用Process Explorer查看动态…

JAVA开源项目 旅游管理系统 计算机毕业设计

本文项目编号 T 063 &#xff0c;文末自助获取源码 \color{red}{T063&#xff0c;文末自助获取源码} T063&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

SpringBoot项目 | 瑞吉外卖 | 短信发送验证码功能改为免费的邮箱发送验证码功能 | 代码实现

0.前情提要 之前的po已经说了单独的邮箱验证码发送功能怎么实现&#xff1a; https://blog.csdn.net/qq_61551948/article/details/142641495 这篇说下如何把该功能整合到瑞吉项目里面&#xff0c;也就是把原先项目里的短信发送验证码的功能改掉&#xff0c;改为邮箱发送验证…