在 Manjaro 中更新后 PostGIS 不工作
PostGIS doesn't work after update in Manjaro
我最近 运行 对我的 Manjaro 系统进行了全面更新,之后,当我尝试 运行 我用来启动并自动保存我的 Postgres-DB 的小脚本时,我得到以下信息shell.
中的错误
pg_dump: error: query failed: ERROR: could not load library
"/usr/lib/postgresql/postgis-3.so": /usr/lib/postgresql/postgis-3.so:
undefined symbol: 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 中启动数据库时,我可以打开所有表,除了包含 geography 列的表,它需要 PostGIS。它向我显示以下错误:
ERROR: could not load library /usr/lib/postgresql/postgis-3.so: /usr/lib/postgresql/postgis-3.so: undefined symbol: list_make1_impl SQL state: 58P01
显然 proj 包中的某些东西搞砸了。根据this thread,这可能与这个包被多次安装有关。但是,我每次都使用不同的版本从官方仓库和 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,设置了一个新的数据库集群,并在最后一个 .sql 上使用了 pg_restore
来自我的自动 pg_dump
来重新创建数据库。它现在又像以前一样工作了。
我最近 运行 对我的 Manjaro 系统进行了全面更新,之后,当我尝试 运行 我用来启动并自动保存我的 Postgres-DB 的小脚本时,我得到以下信息shell.
中的错误pg_dump: error: query failed: ERROR: could not load library "/usr/lib/postgresql/postgis-3.so": /usr/lib/postgresql/postgis-3.so: undefined symbol: 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 中启动数据库时,我可以打开所有表,除了包含 geography 列的表,它需要 PostGIS。它向我显示以下错误:
ERROR: could not load library /usr/lib/postgresql/postgis-3.so: /usr/lib/postgresql/postgis-3.so: undefined symbol: list_make1_impl SQL state: 58P01
显然 proj 包中的某些东西搞砸了。根据this thread,这可能与这个包被多次安装有关。但是,我每次都使用不同的版本从官方仓库和 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,设置了一个新的数据库集群,并在最后一个 .sql 上使用了 pg_restore
来自我的自动 pg_dump
来重新创建数据库。它现在又像以前一样工作了。