PostGIS 擴展創建失敗原因調查

来源:https://www.cnblogs.com/dbadaily/archive/2022/05/21/postgis-issue.html
-Advertisement-
Play Games

Issue 升級 PostgreSQL 9.1 的一個集群,由於該集群用到了 PostGIS,在升級 PostgreSQL 時也需要升級一下 PostGIS。PostGIS 相關軟體安裝好後,在 PostgreSQL 11 中創建 postgis extension 時失敗,如下: alvindb= ...


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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 新創建的 asp.net mvc web api 項目後直接部署到 IIS 中,然後通過另外功能變數名稱 Ajax 跨功能變數名稱調用一個POST介面,並且請求頭headers中增加 Content-Type:application/json,根據阮一峰的文章《跨域資源共用 CORS 詳解》可知道這個非簡單請求會先... ...
  • tmux在連接遠程伺服器做實驗時很有幫助,可以為每一個項目設置一個Session,在Session中設置不同的Window同時跑多個實驗,Window本身還可以分割為多個Pane,在一個視野內利用多個Pane可以更方便地地做對比實驗,或者一邊實驗同時能監視系統的顯存占用,進程信息等狀態。 tmux採 ...
  • 1、修改主機名 方法一# hostname 主機名 ##臨時修改主機名 方法二#vim /etc/hostname ##修改hostname文件重啟系統生效 將localhost.localdomain改為自定的主機名 2、設置sudo給用戶 # vim /etc/sudoers ##編輯sudoe ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 AutoWare.auto 安裝實踐 1. 相關程式版本說明 ubuntu版本:20.04 ADE:4.4.0 Autoware.auto版本(基於ROS2):autoware.auto foxy, ros foxy 2. Docker安裝 以下 ...
  • 引言 最近收到領導通知,甲方需要將原來的伺服器遷移到新的伺服器。 原來的伺服器上安裝了很多的服務,每次重啟之後總是有很多的問題需要人工大量的進行干預。 這次遷移的還是Windows伺服器於是這次打算使用Docker給以後減少點麻煩。 有的項目必須跑在Windows環境中,吐槽。 準備工作 操作系統: ...
  • awk linux命令_sed AWK 是一種處理文本文件的語言,是一個強大的文本分析工具。 之所以叫 AWK 是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字元。 學習具體使用前,先來看下 aw ...
  • 本文例子參考《STM32單片機開發實例——基於Proteus虛擬模擬與HAL/LL庫》 源代碼:https://github.com/LanLinnet/STM33F103R6 項目要求 單片機每隔1s以“YYYY-MM-DD HH:MM:SS”的格式自動向串口輸出日期和時間信息(“ASCII格式” ...
  • 鏡像下載、功能變數名稱解析、時間同步請點擊 阿裡雲開源鏡像站 一,VMware配置。 因為要裝kali,所以要用到Debian。 這裡的處理器配置要根據自己的電腦硬體決定。 查找電腦處理器信息: 控制面板——設備管理器——處理器 這裡也是看著給,有條件的多給點,沒有就預設。 如果有人真的要問,最低推薦不就可 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文將以 C# 語言來實現一個簡單的布隆過濾器,為簡化說明,設計得很簡單,僅供學習使用。 感謝@時總百忙之中的指導。 布隆過濾器簡介 布隆過濾器(Bloom filter)是一種特殊的 Hash Table,能夠以較小的存儲空間較快地判斷出數據是否存在。常用於允許一定誤判率的數據過濾及防止緩存 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 「簡單有價值的事情長期堅持做」 這是成功最簡單,但也最難學的秘訣。不經過訓練,人很難意識到時間複利的威力。 仙劍奇俠傳的「十里坡劍神」和金庸群俠傳的「十級野球拳」,就是簡單的事情持之以恆反覆做,最後就有巨大的威力 唐家三少成為網文收入第一,最重要的一步是十四年從未斷日更 這樣的案例很多,一開始可能成 ...
  • 迎面走來了你的面試官,身穿格子衫,挺著啤酒肚,髮際線嚴重後移的中年男子。 手拿泡著枸杞的保溫杯,胳膊夾著MacBook,MacBook上還貼著公司標語:“我愛加班”。 面試開始,直入正題。 面試官: 看你簡歷上面寫著精通MySQL,我先問你事務的特性是什麼? 老生常談,這個還有誰不會背的嗎? 我: ...
  • 基礎知識 python是一門腳本語言,它是解釋執行的。 python使用縮進做為語法,而且python2環境下同一個py文件中不能同時存在tab和空格縮進,否則會出錯,建議在IDE中顯示縮進符。 python在聲明變數時不寫數據類型,可以type(xx)來獲取欄位的類型,然後可以int(),list ...
  • 為什麼要多線程下載 俗話說要以終為始,那麼我們首先要明確多線程下載的目標是什麼,不外乎是為了更快的下載文件。那麼問題來了,多線程下載文件相比於單線程是不是更快? 對於這個問題可以看下圖。 橫坐標是線程數,縱坐標是使用對應線程數下載對應文件時花費的時間,藍橙綠代表下載文件的大小,每個線程下載對應文件2 ...
  • 詳細講解python爬蟲代碼,爬微博搜索結果的博文數據。 爬取欄位: 頁碼、微博id、微博bid、微博作者、發佈時間、微博內容、轉發數、評論數、點贊數。 爬蟲技術: 1、requests 發送請求 2、datetime 時間格式轉換 3、jsonpath 快速解析json數據 4、re 正則表達式提... ...
  • 背景: 一般我們可以用HashMap做本地緩存,但是HashMap功能比較弱,不支持Key過期,不支持數據範圍查找等。故在此實現了一個簡易的本地緩存,取名叫fastmap。 功能: 1.支持數據過期 2.支持等值查找 3.支持範圍查找 4.支持key排序 實現思路: 1.等值查找採用HashMap2 ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 本章是系列文章的第八章,用著色演算法進行寄存器的分配過程。 本文中的所有內容來自學習DCC888的學習筆記或者自己理解的整理,如需轉載請註明出處。周榮華@燧原科技 寄存器分配 寄存器分配是為程式處理的值找到存儲位置的問題 這些值可以存放到寄存器,也可以存放在記憶體中 寄存器更快,但數量有限 記憶體很多,但 ...