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

news2024/11/15 9:19:09

一、

本文的写作理由

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.coloradmin.cn/o/2185196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】CSVKit:强大的命令行CSV工具套件

CSVKit 是一个基于命令行的工具集&#xff0c;用于简化 CSV 文件的处理和管理。它提供了从数据转换、筛选、格式化到分析的全方位支持&#xff0c;特别适合需要处理复杂表格数据的用户。相比传统的 Excel 操作&#xff0c;CSVKit 更高效且功能更强大&#xff0c;非常适合数据分…

VSOMEIP代码阅读整理(1) - 网卡状态监听

一. 概述 在routing进程所使用的配置文件中&#xff0c;存在如下配置项目&#xff1a;{"unicast" : "192.168.56.101",..."service-discovery" :{"enable" : "true","multicast" : "224.244.224.245",…

线程和进程的关系和区别

目录 进程 概念 特点 生命周期 进程的通信 应用场景 线程 概念 特点 类型 状态 调度 应用场景 线程和进程的关系与区别 关系 区别 总结 僵尸进程 产生原因 解决方法 进程 概念 第一&#xff0c;进程是一个实体。每一个进程都有它自己的地址空间&#xff…

数字通信中不同信道类型对通信系统性能影响matlab仿真分析,对比AWGN,BEC,BSC以及多径信道

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…

C0013.Clion中利用C++调用opencv打开摄像头

下载opencv https://opencv.org/get-started/ 直接官网下载opencv-4.9.0-windows.exe 安装opencv opencv配置环境变量 如上安装配置完成。

SpringBoot框架下的健康信息管理解决方案

第1章 绪论 1.1背景及意义 随着社会的快速发展&#xff0c;计算机的影响是全面且深入的。人们生活水平的不断提高&#xff0c;日常生活中人们对医院管理方面的要求也在不断提高&#xff0c;由于老龄化人数更是不断增加&#xff0c;使得师生健康信息管理系统的开发成为必需而且紧…

第三批安全可靠评测名单公布,几家欢喜几家忧

9月30号&#xff0c;赶在国庆长假之前&#xff0c;中国信息安全评测中心发布了《安全可靠评测结果公告(2024年第2号)》&#xff0c;测试结果自发布之日起有效期三年。 本期测试分为集中式数据库、分布式数据库和中央处理器三个大类&#xff0c;结果共有14家公司的16个产品入围&…

AI绘画实现数字人2D形象生成及3D数字人视频生成

概述 随着人工智能技术的不断进步&#xff0c;AI绘画已经成为数字艺术创作领域的重要工具。本章将详细介绍如何利用AI绘画技术生成数字人的2D形象&#xff0c;并进一步将其转化为3D数字人视频。通过一系列实践步骤和Python代码示例&#xff0c;您将能够掌握从平台使用到系统部…

计算机毕业设计之:音乐媒体播放及周边产品运营平台(源码+文档+讲解)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

看Threejs好玩示例,学习创新与技术(Noise)

给图像加一点噪声效果&#xff0c;可以起到朦胧背景的效果&#xff0c;比如下面这幅画。 除了普通的图片外&#xff0c;我们可以把这个效果应用到地图或其他方面&#xff0c;比如超过范围不允许用户了解更详细的内容。当然&#xff0c;也可以采用雾Fog效果&#xff0c;但后处理…

鸿蒙ArkUI实战开发-主打自研语言及框架

ArkUI 是 HarmonyOS 的声明式 UI 开发框架&#xff0c;而 ArkUI-X 是基于 ArkUI 框架扩展而来的跨平台开发框架。ArkUI-X 支持 HarmonyOS、OpenHarmony、Android 和 iOS 平台&#xff0c;允许开发者使用一套代码构建支持多平台的应用程序。 一、ArkUI-X 的实战开发步骤 在实战开…

(c++)在堆区创建一个数组并且访问与释放

在堆区创建一个数组&#xff0c;然后利用一个指针指向这个数组的首地址&#xff0c;通过这个指针来访问这个数组。 代码展示了三种赋值的方式&#xff1a; 1.直接利用数组访问赋值 2.利用循环结构&#xff08;和1原理一样&#xff09; 3.循环结构键盘输入赋值 然后输出这个…

Ray_Tracing_In_One_Weekend上

目标&#xff1a; 使用vscodeIDE编写代码&#xff0c;这是我的配置 学习这个教程&#xff0c;完成一个简易的光线追踪器开发 1输出PPM图像 在不使用 opengl &#xff08;渲染图像&#xff09;/ std_image.h&#xff08;加载图像&#xff09;等库的情况下&#xff0c;怎样通…

某信服, 一点底线都没有, 一点Face都不要

某些软件厂商, 仗着自己有点背景, 做出来的东西真的是流氓 !!! 铁子们, 这玩意儿怎么卸载呢?

CertiK《Hack3d:2024年第三季度安全报告》(附报告全文链接)

CertiK《Hack3d&#xff1a;2024年第三季度Web3.0安全报告》现已发布&#xff0c;本次报告深入分析了2024年7月至9月的链上安全状况&#xff0c;本季度总损失金额为7.53亿美元&#xff0c;网络钓鱼和私钥泄露是本季度造成资产损失的主要原因。 ​ 关键数据 2024年第三季度&a…

数电基础(脉冲波形的变化和发生+multisim)

1.脉冲波形的变化和发生 1.1单稳态电路 1.1.1逻辑门组成的单稳态电路 基本概念 &#xff08;1&#xff09;单稳态电路&#xff08;monostable multivibrator又称one-shot&#xff09;常用于脉冲的变换&#xff0c;延时和定时 电路的输出有稳态和暂稳态两个不同的工作状态 …

java常用框架结构

1. Spring框架 特色&#xff1a;Spring框架就像是一个万能工具箱&#xff0c;提供了丰富的功能来满足开发者的各种需求。它支持面向切面编程&#xff08;AOP&#xff09;、依赖注入&#xff08;DI&#xff09;等特性&#xff0c;使得代码更加模块化和可维护。Spring还提供了对数…

【web安全】——XXE漏洞

1.XML基础 1.1.XML简介 XML被称为可扩展标记语言&#xff0c;与HTML类似&#xff0c;但是HTML中的标签都是预定义(预先定义好每个标签的作用)的&#xff0c;而XML语言中的标签都是自定义(可以自己定义标签的名称、属性、值、作用)的;HTML中的标签可以是单标签&#xff0c;而X…

洛谷 P11045 [蓝桥杯 2024 省 Java B] 最优分组

[Problem Discription] \color{blue}{\texttt{[Problem Discription]}} [Problem Discription] [Analysis] \color{blue}{\texttt{[Analysis]}} [Analysis] 首先得注意这么一点&#xff1a; k k k 必须得是 n n n 的因数&#xff08;这里的 n , k n,k n,k 对应于题目的 N ,…

【若依】postman调试出现认证失败,无法访问系统资源

如果前后端都已经连接通了&#xff0c;但是调试出现错误代码&#xff0c;可能是因为没有授权的问题&#xff0c;需要获得授权。 授权内容在cookie中 把cookie中的token内容粘贴到postman里面 这个时候再在postman里测试接口&#xff0c;发现可以拿到数据了