postgis_raster 從 2.x 升級至 3.x

從 PostGIS 3.0 開始,對於柵格數據的支持就從 postgis 擴展中分離了,叫做 postgis_raster.

主要有兩個原因:

  • PostGIS 插件的柵格功能很多,有超過 150 多個函數和多個數據類型,對於沒用到這些的用戶可能會有些迷茫;
  • gdal 庫的佔體積很大,很多隻用 postgis 擴展的開發者希望減少它

雖然分離出柵格的部分讓一部分開發者滿意了,但是意味着從 2.x 升級到 3.x 的 PostGIS 就變得有點麻煩了,即使是有經驗的用戶也有可能搞砸。

本文將介紹 PostGIS 柵格模塊升級的正確方法,即升級 2.x 的 PostGIS 到 3.x.

你可以用 psql 或 pgAdmin 或者任意一種 PostgreSQL 工具來運行下面的步驟。

無論你現在是什麼版本的 PostGIS,你都應該先把 3.x 的 PostGIS 插件安裝了,也無論你怎麼安裝的。

如果你是 2.4 或以下版本的

-- 這一步僅版本< 2.5.4 
alter extension postgis update;

-- 其它 2.x 的都要做如下步驟:注意,要運行兩次
select postgis_extensions_upgrade();
select postgis_extensions_upgrade();

隨後,若你的數據庫沒有用到柵格相關的功能,沒有包含柵格數據的表,那麼可以用下面的語句刪除柵格擴展:

drop extension postgis_raster;

你可能想問,爲什麼 select postgis_extensions_upgrade(); 這一條語句要跑兩次,原因是跑第一條會將柵格部分從 postgis 擴展中分離出來,分離出函數和類型;跑第二條時,就能把這些函數和類型重新綁定至 postgis_raster 擴展中。

很遺憾,官方沒能通過單個 pg 函數完成這一個過程,因爲官方的作者忘記了具體是爲什麼就沒寫,貌似是因爲 PostgreSQL 的擴展升級、安裝以及創建一個新的擴展這些操作不能在同一個事務中進行。

PostgreSQL 13 移除了 create extension ... from unpackaged 的支持,增加了一些複雜性。因此,升級 13 或者更高版本的 PostgreSQL 之前最好就升級 PostGIS 3.x.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章