Upgrade

升級包含 PostGIS 擴展的 Greenplum DB

  • October 4, 2016

我們有許多執行 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 數據的伺服器上的每個數據庫都是必需的:

  1. pg_dump包含伺服器上每個數據庫的 PostGIS 相關數據的所有表
  2. 對於在步驟 1中具有 PostGIS 表的數據庫,刪除所有包含 PostGIS 相關數據(與剛剛備份的數據相同)的表
  3. 在步驟 1中針對具有 PostGIS 表的數據庫執行unstall_postgis.sql腳本$GPHOME/share/postgrestql/contrib
  4. 解除安裝 PostGIS 1.0 gppkg ( %> gppkg -r postgis-1.0)
  5. 通過gpmigrator/gpmigrator_mirrors標準流程升級 GreenPlum 數據庫
  6. 安裝 PostGIS 2.0 gppkg ( %> gppkg -i postgis-ossv2.0.3_pv2.0.1_gpdb4.3orca-rhel5-x86_64.gppkg)
  7. 在步驟 1中針對每個具有 PostGIS 表的數據庫執行postgis.sql腳本$GPHOME/share/postgresql/contrib/postgis-2.0
  8. 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選項

引用自:https://dba.stackexchange.com/questions/150085