升級包含 PostGIS 擴展的 Greenplum DB
我們有許多執行 PostGIS 1.4 的 4.2.3.2 Greenplum 數據庫。我們正在嘗試將這些數據庫安裝到更新版本的 Greenplum 上,例如 4.3.8.1 或重新發布的 4.3.9.1 版本,但是在嘗試將 PostGIS 升級到 2.0 版時遇到了一堆問題。我們嘗試了多種不同的方法來升級數據庫,而不會影響依賴 PostGIS 1.4 的數據和功能,但看起來當我們使用新的 PostGIS 擴展執行gppkg實用程序時,我們只會收到錯誤,類似於以下內容:
gppkg -i postgis-ossv2.0.3_pv2.0.1_gpdb4.3orca-rhel5-x86_64.gppkg 20160919:13:21:20:024675 gppkg:s-md-pv-gp-01-01:gpadmin-[INFO]:-Starting gppkg with args: -i postgis-ossv2.0.3_pv2.0.1_gpdb4.3orca-rhel5-x86_64.gppkg 20160919:13:21:20:024675 gppkg:s-md-pv-gp-01-01:gpadmin-[CRITICAL]:-gppkg failed. (Reason='__init__() got an unexpected keyword argument 'postupdate'') exiting...
我們還通過 -u 標誌執行 gppkg,結果類似:
gppkg -u postgis-ossv2.0.3_pv2.0.1_gpdb4.3orca-rhel5-x86_64.gppkg 20160919:13:35:52:024930 gppkg:s-md-pv-gp-01-01:gpadmin-[INFO]:-Starting gppkg with args: -u postgis-ossv2.0.3_pv2.0.1_gpdb4.3orca-rhel5-x86_64.gppkg 20160919:13:35:52:024930 gppkg:s-md-pv-gp-01-01:gpadmin-[WARNING]:-WARNING: The process of updating a package includes removing all 20160919:13:35:52:024930 gppkg:s-md-pv-gp-01-01:gpadmin-[WARNING]:-previous versions of the system objects related to the package. For 20160919:13:35:52:024930 gppkg:s-md-pv-gp-01-01:gpadmin-[WARNING]:-example, previous versions of shared libraries are removed. 20160919:13:35:52:024930 gppkg:s-md-pv-gp-01-01:gpadmin-[WARNING]:-After the update process, a database function will fail when it is 20160919:13:35:52:024930 gppkg:s-md-pv-gp-01-01:gpadmin-[WARNING]:-called if the function references a package file that has been removed. Do you still want to continue ? Yy|Nn (default=N): > y 20160919:13:35:59:024930 gppkg:s-md-pv-gp-01-01:gpadmin-[CRITICAL]:-gppkg failed. (Reason='__init__() got an unexpected keyword argument 'postupdate'') exiting...
一個主要的警告也可能與只有Greenplum 版本 4.2.6.X 到 4.2.8.X 支持 postGIS 版本 1.4 和 2.0 的事實有關。在這一點上,我們正在尋找一些關於如何進行的方向,希望其他人可能會遇到這些障礙。
我們有供應商 Pivotal 的門票,但事實證明這些都沒有成效,所以我在這裡發帖希望社區有一些他們可以指出我的方向。
謝謝,
約翰
我們確定的升級路徑正是kludgy的定義,但它看起來通過升級數據庫和升級 PostGIS 擴展的最終結果來獲取所有數據。(誠然,Rube Goldberg-ish)步驟如下,並且對於正在升級的包含 PostGIS 數據的伺服器上的每個數據庫都是必需的:
pg_dump
包含伺服器上每個數據庫的 PostGIS 相關數據的所有表- 對於在步驟 1中具有 PostGIS 表的數據庫,刪除所有包含 PostGIS 相關數據(與剛剛備份的數據相同)的表
- 在步驟 1中針對具有 PostGIS 表的數據庫執行
unstall_postgis.sql
腳本$GPHOME/share/postgrestql/contrib
- 解除安裝 PostGIS 1.0 gppkg (
%> gppkg -r postgis-1.0
)- 通過gpmigrator/gpmigrator_mirrors標準流程升級 GreenPlum 數據庫
- 安裝 PostGIS 2.0 gppkg (
%> gppkg -i postgis-ossv2.0.3_pv2.0.1_gpdb4.3orca-rhel5-x86_64.gppkg
)- 在步驟 1中針對每個具有 PostGIS 表的數據庫執行
postgis.sql
腳本$GPHOME/share/postgresql/contrib/postgis-2.0
pg_restore
在步驟 1中導出的所有表我們還在中間伺服器上包括了一些未在此處列出的步驟,以避免就地升級,因此我們有一個快速恢復點。這個過程有點麻煩,但到目前為止的測試似乎表明它可以正常工作,沒有任何明顯的問題。
希望這可以幫助將來的人,
約翰
我敢打賭,這個
postgis-ossv2.0.3_pv2.0.1_gpdb4.3orca-rhel5-x86_64.gppkg
包有一個錯誤,它沒有實現Gppkg 類postupdate
中定義的。TAG 是可選的,因此看起來它正在呼叫(SPECFILE_OPTIONAL_TAGS = ... 'postupdate'] )
檢查該位置是否存在升級腳本 ($GPHOME/share/postgresql/contrib/postgis-2.0/postgis_upgrade_20_minor.sql)。包裝細節。
從該規範:
PostUpdate: 10 - Master: "echo 'Please run psql -d mydatabase -f $GPHOME/share/postgresql/contrib/postgis-2.0/postgis_upgrade_20_minor.sql to finish the update.'"
此外,您可能想嘗試該
--clean
選項