在 Manjaro 中更新后 PostGIS 不起作用

问题描述

我最近在我的 manjaro-System 上运行了一个完整的更新,之后,当我尝试运行一个我用来启动并自动保存我的 Postgres-DB 的小脚本时,我在 shell 中收到以下错误

pg_dump:错误查询失败:错误:无法加载库 “/usr/lib/postgresql/postgis-3.so”:/usr/lib/postgresql/postgis-3.so: 未定义符号:list_make1_impl

pg_dump:错误查询是:

SELECT
a.attnum,a.attname,a.atttypmod,a.attstattarget,a.attstorage,t.typstorage,a.attnotnull,a.atthasdef,a.attisdropped,a.attlen,a.attalign,a.attislocal,pg_catalog.format_type(t.oid,a.atttypmod) AS atttypname,a.attgenerated,CASE WHEN a.atthasmissing AND NOT a.attisdropped THEN a.attmissingval ELSE null END AS attmissingval,a.attidentity,pg_catalog.array_to_string(ARRAY(SELECT pg_catalog.quote_ident(option_name) || ' ' || pg_catalog.quote_literal(option_value) FROM pg_catalog.pg_options_to_table(attfdwoptions) ORDER BY option_name),E',') AS attfdwoptions,CASE WHEN a.attcollation <> t.typcollation THEN a.attcollation ELSE 0 END AS attcollation,array_to_string(a.attoptions,',') AS attoptions
FROM pg_catalog.pg_attribute a LEFT JOIN pg_catalog.pg_type t ON a.atttypid = t.oid
WHERE a.attrelid = '18597'::pg_catalog.oid AND a.attnum > 0::pg_catalog.int2
ORDER BY a.attnum

此外,当我在 pgAdmin 中启动数据库时,我可以打开所有表,除了包含需要 PostGIS 的 geography 列的表。它向我显示以下错误

错误:无法加载库/usr/lib/postgresql/postgis-3.so:/usr/lib/postgresql/postgis-3.so:未定义符号:list_make1_impl sql 状态:58P01

显然 proj 包中的某些东西搞砸了。根据{{​​3}},这可能与多次安装此软件包有关。但是,我每次都从官方仓库和 AUR 手动重新安装了 proj 不同的版本,并每次都清理旧版本。错误仍然存​​在。

目前版本设置为:

QGIS: Version 3.16.5
Postgres: Version 12.6-1
PostGIS: Version 3.0.3-1
proj: Version 6.3.2-1
manjaro: KDE-plasma 5.21.3
Kernel: 4.19.183-1-manjaro

有没有人有解决方案?

解决方法

多亏了本地 Linux 用户组,我找到了问题的解决方案。原来是后台更新了PostGIS,新版本不再对应PostgreSQL 12.6。由于 PostGIS 已经安装,它没有向我显示这个,而是显示了上面的错误消息。

为了检查 PostGIS 是否仍然与 PostgreSQL 兼容,我创建了一个新数据库,然后尝试添加 PostGIS 扩展。我收到了以下消息,这清除了一切:

test=# CREATE EXTENSION postgis;
ERROR: could not open extension control file "/usr/share/postgresql/extensionpost.control": No such file or directory
test=# CREATE EXTENSION postgis;
ERROR: PostGIS built for PostgreSQL 13.0 cannot be loaded in PostgreSQL 12.6

所以我更新了 PostgreSQL,设置了一个新的数据库集群,并在我的自动 pg_restore 中的最后一个 .sql 上使用 pg_dump 重新创建数据库。现在它又可以像以前一样工作了。