微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐