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

embedded/2024/10/19 7:02:31/

一、

本文的写作理由

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.ppmy.cn/embedded/121056.html

相关文章

基于Vue3内置的lodash函数库实现防抖节流

前言 防抖节流是可以说是一种优化组件性能的技巧&#xff0c;可以有效减少组件中的渲染次数和计算量&#xff0c;从而提高组件的响应速度和用户体验。在Vue3中可以使用lodash库中的debounce和throttle函数来分别实现防抖和节流。当然也可以自行设计实现防抖节流函数&#xff0…

JS进阶 1——作用域、解构、箭头函数

JS进阶 1——作用域、解构、箭头函数 1.作用域 局部作用域分为&#xff1a;函数作用域和块作用域 函数作用域&#xff1a;在函数内部声明的变量只能在函数内部被访问块作用域&#xff1a;被{ }包裹的代码成为代码块&#xff0c;代码块内部声明的变量外部将有可能无法访问 var声…

IOS-IPA签名工具 request_post 任意文件读取复现

0x01 产品描述&#xff1a; 苹果手机中的IPA是指iOS应用程序&#xff08;iPhone应用程序&#xff09;的安装包文件&#xff0c;其文件扩展名为.ipa。IPA文件是经过编译的、已签名的应用程序文件&#xff0c;可以在iOS设备上安装和运行。通常&#xff0c;开发者通过Xcode等开发工…

滚雪球学MySQL[10.2讲]:数据库性能问题排查详解:从慢查询优化到内存与CPU使用分析

全文目录&#xff1a; 前言10.2 性能问题排查1. 慢查询优化1.1 慢查询日志的使用配置慢查询日志案例演示&#xff1a;慢查询日志分析 1.2 慢查询优化策略1.3 实际案例分析&#xff1a;分页查询优化 2. 内存与CPU使用分析2.1 内存使用分析内存配置优化 2.2 CPU使用分析CPU优化措…

JavaScript 网页设计案例:打造一个交互式用户界面

随着Web开发的不断进步&#xff0c;JavaScript已成为前端开发中不可或缺的语言。本文将通过一个具体的案例&#xff0c;展示如何利用JavaScript创建一个简单而富有交互性的网页&#xff0c;涵盖布局、样式和动态效果等方面。 一、项目概述 本案例将构建一个“任务列表”网页应…

PDF对话RAG应用开发实战

与大型 PDF 对话很酷。你可以与笔记、书籍和文档等聊天。这篇博文将帮助你构建一个基于 Multi RAG Streamlit 的 Web 应用程序&#xff0c;以通过对话式 AI 聊天机器人读取、处理和与 PDF 数据交互。以下是此应用程序工作原理的分步分解&#xff0c;使用简单的语言易于理解。 N…

C++:采用模板封装顺序表,栈,队列

1.顺序表&#xff1a; list.hpp #ifndef LIST_HPP #define LIST_HPP #include <iostream>using namespace std;template <class L>class Seqlist { private:L *ptr;L size;L len0;public:void init(L n){//堆区申请空间&#xff08;大小为n&#xff09;this->…

面试题05.08绘制直线问题详解(考察点为位运算符)

目录 一题目&#xff1a; 二详细思路汇总&#xff1a; 三代码解答&#xff08;带注释版&#xff09;&#xff1a; 一题目&#xff1a; leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 二详细思路汇总&#xff1a; 这里先剧透一下简单版思路哦&…