Postgis 从 3.1.11 升级到 3.2.7 或 3.3.6 或任何更高版本失败,并显示错误扩展名“postgis”没有更新路径

问题描述 投票:0回答:1

当前数据库版本:Postgres 13 目标数据库版本:Postgres 14/15 通过 pg_upgrade 当前postgis版本:3.1.11 目标postgis版本:3.2.7或3.3.4

执行的步骤:

  1. 升级数据库,然后升级postgis:
  • 数据库升级到postgres 14,原始postgis版本为postgis31_14
  • 升级前的postgis版本:

postgres=# 选择 postgis_full_version();

POSTGIS="3.1.11 ca03d62" [EXTENSION] PGSQL="130" (procs need upgrade for use with PostgreSQL "140") GEOS="3.12.1-CAPI-1.18.1" SFCGAL="1.4.1" PROJ="9.4.0 (1 row)

  • Postgis 已升级以反映新的数据库版本 `选择 PostGIS_Extensions_Upgrade(); 注意:更新扩展 postgis 3.1.11 注意:由于某种原因,扩展 postgis_raster 不可用或不可打包 注意:扩展 postgis_tiger_geocoder 由于某种原因不可用或不可打包 postgis_extensions_upgrade

升级完成,运行 SELECT postgis_full_version();欲了解详情 (1行)`

`选择 postgis_full_version();

POSTGIS =“3.1.11 ca03d62”[扩展] PGSQL =“140”GEOS =“3.12.1-CAPI-1.18.1”SFCGAL =“1.4.1”PROJ =“9.4.0”LIBXML =“2.9.13” “ LIBJSON =“0.14”LIBPROTOBUF =“1.3.3” (1行)`

  • 在此之后,删除旧版本 3.1.11 后安装了新版本的 postgis32_14 (3.2.7)(我注意到 dnf 不允许这两个版本,因为与某些已存在的文件冲突。错误详细信息如下)。

  • 下载后,当我检查数据库上的 postgis 版本时,它显示以下消息:

    POSTGIS="3.2.7 32dc0cc" [EXTENSION] PGSQL="140" GEOS="3.12.1-CAPI-1.18.1" SFCGAL="1.4.1" PROJ="9.4.0" LIBXML="2.9.13" LIBJSON="0.14" LIBPROTOBUF="1.3.3" rade) (sfcgal procs from "3.1.11 ca03d62" need upgrade)

  • 执行 SELECT PostGIS_Extensions_Upgrade();它抛出以下错误:

    NOTICE:  Updating extension postgis from 3.1.11 to 3.2.7 ERROR:  extension "postgis" has no update path from version "3.1.11" to version "3.2.7" CONTEXT:  SQL statement "ALTER EXTENSION postgis UPDATE TO "3.2.7";" PL/pgSQL function postgis_extensions_upgrade() line 82 at EXECUTE

  1. 升级postgis,然后升级postgres
  • Postgis 版本 32_13 (3.2.7) 或 33_13 (3.3.6) 是通过删除 31_13 (3.1.11) 下载的,但在升级时,错误消息与第一种情况相同。

下载新的postgis版本后,我可以看到默认版本是新版本,安装的版本是旧版本,但我绝对无法升级它。我什至尝试通过 ALTER EXTENSION POSTGIS UPDATE 但没有成功。

由于数据库大小大于 1TB,因此无法使用最新的 postgis 版本安装新数据库并执行 pg dump(硬升级)。

过去将postgis从2.5升级到3.0时,链接解决方案曾经可以工作,但在3.1和3.2或3.3之间链接.so文件不起作用,它会抛出如下错误:

could not load library "$libdir/postgis_raster-3": ERROR:  incompatible library "/usr/pgsql-14/lib/postgis_raster-3.so": version mismatch DETAIL:  Server is version 14, library is version 13.

与旧版本一起下载新版本的 postgis 时遇到错误:

Error: Transaction test error: file /usr/pgsql-14/lib/address_standardizer-3.so from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgis31_14-3. file /usr/pgsql-14/lib/postgis-3.so from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgis31_14-3.1.11-3PGDG.rh file /usr/pgsql-14/lib/postgis_raster-3.so from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgis31_14-3.1.11-3 file /usr/pgsql-14/lib/postgis_sfcgal-3.so from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgis31_14-3.1.11-3 file /usr/pgsql-14/lib/postgis_topology-3.so from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgis31_14-3.1.11 file /usr/pgsql-14/share/extension/address_standardizer.control from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package file /usr/pgsql-14/share/extension/address_standardizer_data_us.control from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from file /usr/pgsql-14/share/extension/postgis.control from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgis31_14- file /usr/pgsql-14/share/extension/postgis_raster.control from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgi file /usr/pgsql-14/share/extension/postgis_sfcgal.control from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package postgi file /usr/pgsql-14/share/extension/postgis_tiger_geocoder.control from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from packag file /usr/pgsql-14/share/extension/postgis_topology.control from install of postgis32_14-3.2.7-3PGDG.rhel9.x86_64 conflicts with file from package post

如果有人遇到类似的问题并找到解决方案或来自 postgis 专家的任何帮助都会有所帮助。

我没有尝试删除扩展名(仅尝试了栅格),但我相信我们不能删除扩展名并重新创建,因为它可能会损坏数据库上已有的旧函数或数据。

尝试了在 Stack Overflow 或其他门户网站上找到的所有可能的解决方案,但不幸的是没有任何帮助。我将非常感谢能够为我提供解决此问题的可能解决方法的人。

postgresql postgis
1个回答
0
投票

我在 Centos Stream 9 机器上运行 postgresql 12,并尝试从 postgis 3.2.7 升级到 3.3 或 3.4,但在这两种情况下我都会遇到类似的“无更新路径”错误。

经过一番调查,更新路径似乎是由此处找到的 SQL 文件定义的:

/usr/pgsql-12/share/extension

我有一直升级到 3.2.6 的路径,但没有 3.2.7 的脚本。我假设它丢失只是由于包装问题。由于所有脚本都只是通用文件的符号链接,因此我能够为 3.2.7 创建必要的脚本:

cd /usr/pgsql-12/share/extension
ln -s postgis--TEMPLATED--TO--ANY.sql postgis--3.2.7--ANY.sql
ln -s postgis_raster--TEMPLATED--TO--ANY.sql postgis_raster--3.2.7--ANY.sql
ln -s postgis_sfcgal--TEMPLATED--TO--ANY.sql postgis_sfcgal--3.2.7--ANY.sql
ln -s postgis_topology--TEMPLATED--TO--ANY.sql postgis_topology--3.2.7--ANY.sql

运行

select postgis_extensions_upgrade()
就成功了。

© www.soinside.com 2019 - 2024. All rights reserved.