码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PostGIS 扩展创建失败原因调查


    Issue

    升级 PostgreSQL 9.1 的一个集群,由于该集群用到了 PostGIS,在升级 PostgreSQL 时也需要升级一下 PostGIS。PostGIS 相关软件安装好后,在 PostgreSQL 11 中创建 postgis extension 时失败,如下:

    alvindb=# CREATE EXTENSION postgis;
    ERROR: could not load library "/data/pg11/lib/postgresql/postgis-x.x.so": /data/pg11/lib/postgresql/postgis-x.x.so: undefined symbol: GEOSClipByRect

    Investigation

    geos 是 PostGIS 的依赖包之一。通过 google 后怀疑是老版本 geos 的问题。

    通过如下命令检查,确实是 geos 版本不一致。

    # geos-config --version
    3.x
    # rpm -qa|grep geo
    geos-3.y

    通过定位 geos-config 绝对路径,可以确定 /usr/local/bin/geos-config 是旧版本的。

    # whereis geos-config
    geos-config: /usr/bin/geos-config /usr/local/bin/geos-config
    # /usr/local/bin/geos-config --version
    3.x
    # /usr/bin/geos-config --version
    3.y

    通过 rpm 命令,得知旧版本 geos 并不是通过 rpm 命令安装的。

    # rpm -q --whatprovides /usr/local/bin/geos-config
    file /usr/local/bin/geos-config is not owned by any package
    # rpm -q --whatprovides /usr/bin/geos-config
    geos-3.y

    将旧版本 geos rename 后,

    # mv /usr/local/bin/geos-config /usr/local/bin/geos-config-x

    重新进入命令行,显示正常版本

    # geos-config --version
    3.y

    此时再创建 extension,仍然报错:

    alvindb=# CREATE EXTENSION postgis;
    ERROR: could not load library "/data/pg11/lib/postgresql/postgis-x.x.so": /data/pg11/lib/postgresql/postgis-x.x.so: undefined symbol: GEOSClipByRect

    Solution

    经过一番周折之后,终于解决了。

    在旧版本 geos 的源码目录,通过 make uninstall 卸载旧版本。

    # cd geos-3.x
    # make uninstall
    ...
    ( cd '/usr/local/include/geos/index/strtree' && rm -f AbstractNode.h AbstractSTRtree.h Boundable.h Interval.h ItemBoundable.h SIRtree.h STRtree.h )
    ...

    查看新版本的 geos 相关文件,可知,虽然新老版本都安装在不同目录,还是会有影响的。

    # rpm -ql geos-3.y|grep AbstractNode.h
    /usr/include/geos/index/strtree/AbstractNode.h

    此时再创建 extension,则成功了。

    alvindb=# CREATE EXTENSION postgis;
    CREATE EXTENSION

    总结

    生产环境安装软件时,也需要考虑到软件的升级与维护。源码安装会给管理软件带来一定程度的不便。

    推荐进行统一配置管理(如 Ansible),使软件的管理与配置完全自动化。

    原文链接:
    https://www.cnblogs.com/dbadaily/p/postgis-issue.html
    您浏览的网址与此链接不一致的话,则为未授权的转载,为了更好的阅读体验,建议阅读原文。

    公众号

    关注 DBA Daily 公众号,第一时间收到文章的更新。
    通过一线 DBA 的日常工作,学习实用数据库技术干货!

    公众号优质文章推荐

    写了一个简单易用的 shell 框架

    PostgreSQL VACUUM 之深入浅出

    华山论剑之 PostgreSQL sequence

    GitLab supports only PostgreSQL now

    MySQL or PostgreSQL?

    PostgreSQL hstore Insight

  • 相关阅读:
    C#开发的OpenRA游戏之世界存在的属性CombatDebugOverlay(3)
    计算机毕设 大数据商城人流数据分析与可视化 - python 大数据分析
    FFmpeg:vs2019编译ShiftMediaProject
    天玑8000和骁龙870哪个处理器好?
    「Redis数据结构」RedisObject
    深度解析shell脚本的命令的原理之rm
    并查集总结
    Spring框架学习 -- 核心思想
    手把手教你使用Vite构建第一个Vue3项目
    ubuntu下vscode+cmake实现gtest(cmake引入gtest,glog)
  • 原文地址:https://www.cnblogs.com/dbadaily/p/postgis-issue.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号