当前数据库版本:Postgres 13 目标数据库版本:Postgres 14/15 通过 pg_upgrade 当前postgis版本:3.1.11 目标postgis版本:3.2.7或3.3.4
执行的步骤:
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)
升级完成,运行 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
下载新的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 或其他门户网站上找到的所有可能的解决方案,但不幸的是没有任何帮助。我将非常感谢能够为我提供解决此问题的可能解决方法的人。
我在 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()
就成功了。