【问题标题】:PostgreSQL ERROR: could not access file "$libdir/postgis-2.5"PostgreSQL 错误:无法访问文件“$libdir/postgis-2.5”
【发布时间】:2020-06-11 11:02:30
【问题描述】:

我有一个安装了 postgis 的数据库,但它不再工作了:

# SELECT PostGIS_full_version();
ERROR:  could not access file "$libdir/postgis-2.5": No such file or directory
CONTEXT:  SQL statement "SELECT public.postgis_lib_version()"
PL/pgSQL function postgis_full_version() line 26 at SQL statement

我找到了其他建议运行ALTER EXTENSION postgis UPDATE; 的答案,所以我这样做了,但没有效果:

my_db=# ALTER EXTENSION postgis UPDATE;
NOTICE:  version "2.5.4" of extension "postgis" is already installed
ALTER EXTENSION
my_db=# 
my_db=# SELECT PostGIS_full_version();
ERROR:  could not access file "$libdir/postgis-2.5": No such file or directory
CONTEXT:  SQL statement "SELECT public.postgis_lib_version()"
PL/pgSQL function postgis_full_version() line 26 at SQL statement

有人知道如何解决这个问题吗?

(我在 Ubuntu 20.04 上使用 Posrgresql 版本 12.3。我最近从 Ubuntu 19.10 升级到 20.04,我*认为这是开始出现问题的时候)

[编辑]

我在 apt 中搜索,发现这个包我还没有安装:postgresql-12-postgis-2.5。所以在安装之后 (sudo apt install postgresql-12-postgis-2.5) 我重新启动了 postgresql (sudo service postgresql restart) 并再次尝试,但我仍然得到同样的错误。

【问题讨论】:

  • 你能检查一下提到的目录是否存在,如果存在,有哪些权限(尝试使用pg_config | grep ^PKGLIBDIR获取libdir完整路径)。
  • @pifor - pg_config | grep ^PKGLIBDIR 的结果是 PKGLIBDIR = /usr/lib/postgresql/12/lib。该目录中有很多.so 文件,但没有类似postgis-2.5postgis 的文件。顺便说一句:我最近从 Ubuntu 19.10(我认为有 postgres 11)升级到了 Ubuntu 20.04(现在运行 postgres 12)。这和它有什么关系吗?我检查了/usr/lib/postgresql/11/lib/,里面也没有类似postgis的东西。
  • 抱歉,我不知道 Ubuntu 升级会如何影响 PostgreSQL(我知道更多 CentOS)。你是在版本 12 中创建了自己的 PG 集群还是 Ubunto 升级做到了?
  • @pifor - 我什么都没做。 Ubuntu 完成了整个升级。
  • 我认为 Ubuntu 默认不会在现有数据库中安装 Postgis。对于 PG 11:Postgis 是如何安装的?你安装了吗?您是否从安装了 Postgis 的源数据库运行 pg_restore ?

标签: linux postgresql gis postgis


【解决方案1】:

我想将此作为评论发布,但我没有足够的声誉。我有一个非常相似的问题,并详细解释了如果超过here,我是如何解决的。我希望这对你也有帮助。

【讨论】:

    【解决方案2】:

    升级到 Ubuntu 20.04 后,我也遇到了同样的情况。

    通常,postgresql 的主要升级不会替换以前的版本,因为必须转储和恢复数据库。新版本与旧版本一起安装,并在新服务器上分配了不同的端口。由用户将旧数据库迁移到新版本。

    在我的情况下,由于某种原因,升级删除了以前 postgresql 版本中的 postgis-2.5 库,在旧数据库中留下了损坏的 postgis 安装(当然,在新数据库中没有安装。)

    很容易混淆并连接到错误的服务器;至少,我很容易感到困惑,因此即使在为新的 postgresql 版本安装了 postgis 之后,我也会收到相同的错误消息。我发现了检查 pg_lsclusters 并了解哪个服务器正在侦听哪个端口的问题。

    【讨论】:

    • Running pg_lsclusters 确实向我展示了两个运行的 postgresql 版本,默认端口 5432 上的版本 11 和端口 5433 上的版本 12。所以很高兴知道。但是您是如何利用这些知识来解决问题的呢?你卸载了11版吗?之后你做了什么?
    • 该过程将转储旧数据库(pg_dumpall;使用实用程序的版本 11)并将其恢复到新数据库(pg_restore;使用实用程序的版本 12 版本。)更好地解释在postgresql.org/docs/12/upgrading.html。当然,您需要连接它们各自的端口。恐怕您必须在源数据库和目标数据库上都正确安装 postgis。现在我想你已经在版本 12 上安装它并在版本 11 上损坏。我不知道如何进一步帮助你修复它。
    • 如果您像我一样有幸在另一台计算机上拥有另一个数据库副本,您可以跳过转储并简单地摆脱旧安装并让新版本监听端口 5432 . 然后从你拥有的任何工作数据库中恢复。
    猜你喜欢
    • 1970-01-01
    • 2013-10-16
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2011-03-23
    • 2020-10-26
    相关资源
    最近更新 更多