postgis_raster 從 2.x 升級(jí)至 3.x
從 PostGIS 3.0 開(kāi)始,對(duì)于柵格數(shù)據(jù)的支持就從 postgis 擴(kuò)展中分離了,叫做 postgis_raster.
主要有兩個(gè)原因:
- PostGIS 插件的柵格功能很多,有超過(guò) 150 多個(gè)函數(shù)和多個(gè)數(shù)據(jù)類(lèi)型,對(duì)于沒(méi)用到這些的用戶(hù)可能會(huì)有些迷茫;
- gdal 庫(kù)的占體積很大,很多只用
postgis擴(kuò)展的開(kāi)發(fā)者希望減少它
雖然分離出柵格的部分讓一部分開(kāi)發(fā)者滿意了,但是意味著從 2.x 升級(jí)到 3.x 的 PostGIS 就變得有點(diǎn)麻煩了,即使是有經(jīng)驗(yàn)的用戶(hù)也有可能搞砸。
本文將介紹 PostGIS 柵格模塊升級(jí)的正確方法,即升級(jí) 2.x 的 PostGIS 到 3.x.
你可以用 psql 或 pgAdmin 或者任意一種 PostgreSQL 工具來(lái)運(yùn)行下面的步驟。
無(wú)論你現(xiàn)在是什么版本的 PostGIS,你都應(yīng)該先把 3.x 的 PostGIS 插件安裝了,也無(wú)論你怎么安裝的。
如果你是 2.4 或以下版本的
-- 這一步僅版本< 2.5.4
alter extension postgis update;
-- 其它 2.x 的都要做如下步驟:注意,要運(yùn)行兩次
select postgis_extensions_upgrade();
select postgis_extensions_upgrade();
隨后,若你的數(shù)據(jù)庫(kù)沒(méi)有用到柵格相關(guān)的功能,沒(méi)有包含柵格數(shù)據(jù)的表,那么可以用下面的語(yǔ)句刪除柵格擴(kuò)展:
drop extension postgis_raster;
你可能想問(wèn),為什么 select postgis_extensions_upgrade(); 這一條語(yǔ)句要跑兩次,原因是跑第一條會(huì)將柵格部分從 postgis 擴(kuò)展中分離出來(lái),分離出函數(shù)和類(lèi)型;跑第二條時(shí),就能把這些函數(shù)和類(lèi)型重新綁定至 postgis_raster 擴(kuò)展中。
很遺憾,官方?jīng)]能通過(guò)單個(gè) pg 函數(shù)完成這一個(gè)過(guò)程,因?yàn)楣俜降淖髡咄浟司唧w是為什么就沒(méi)寫(xiě),貌似是因?yàn)?PostgreSQL 的擴(kuò)展升級(jí)、安裝以及創(chuàng)建一個(gè)新的擴(kuò)展這些操作不能在同一個(gè)事務(wù)中進(jìn)行。
PostgreSQL 13 移除了 create extension ... from unpackaged 的支持,增加了一些復(fù)雜性。因此,升級(jí) 13 或者更高版本的 PostgreSQL 之前最好就升級(jí) PostGIS 3.x.

浙公網(wǎng)安備 33010602011771號(hào)