【问题标题】:migrating from postgresql 9.3 to 9.4, postgis从 postgresql 9.3 迁移到 9.4,postgis
【发布时间】:2015-05-01 13:22:18
【问题描述】:

我从 postgresql 9.3 升级到 9.4,现在我想迁移我的数据。

所以这就是我试图做的。首先我像这样运行旧的 postgresql

/opt/pgsql-9.3/bin/pg_ctl -D /var/lib/postgres/data/ start

然后,我尝试将旧数据库转储到文件中:

/opt/pgsql-9.3/bin/pg_dumpall >> old_backup.sql

它告诉我:

pg_dump: [archiver (db)] query failed: ERROR:  could not access file "$libdir/postgis-2.1": No such file or directory

好吧,我试着找到了 postgis-2.1 文件并将它们复制到libdir

find / -name "*postgis-2.1*"
/usr/lib/postgresql/rtpostgis-2.1.so
/usr/lib/postgresql/postgis-2.1.so
/usr/lib/postgresql/postgis-2.1 <-----

好的,现在libdir 是什么?

/opt/pgsql-9.3/bin/pg_config --pkglibdir
/opt/pgsql-9.3/lib

所以我在/opt/pgsql-9.3/lib 中建立了一个指向here /usr/lib/postgresql/postgis-2.1 的符号链接:

 pwd
/opt/pgsql-9.3/lib
ls -l postgis-2.1
postgis-2.1 -> /usr/share/postgresql/contrib/postgis-2.1

但我仍然收到错误:查询失败:错误:无法访问文件“$libdir/postgis-2.1”:没有这样的文件或目录

我有点想不通。也许有人可以帮助我?

我是usnig arch linux

附言

Postgis 已安装:

pacman -S postgis
warning: postgis-2.1.5-1 is up to date -- reinstalling

这里是二进制文件:

find / -name "*postgis-2.1*"
/usr/lib/postgresql/rtpostgis-2.1.so   <---- binary
/usr/lib/postgresql/postgis-2.1.so     <----- binary
/opt/pgsql-9.3/lib/postgis-2.1         <----- that's the symlink from earlier
/usr/share/postgresql/contrib/postgis-2.1

【问题讨论】:

  • 升级后尝试了pg_dump?
  • 升级是使用pg_upgrade 进行的?顺便说一句:在你使用符号链接的共享库进行杂耍之后,你是否运行了 ldconfig?
  • 没有。我使用 pacman -Syu 进行了升级。我只是做了一个正常的升级。我没有运行 ldconfig。我不知道那是什么。我马上去看看。
  • 好的,非常感谢 ldconfig 提示。我读过它,但我不确定在这种情况下如何使用它,我害怕尝试。你能告诉我在这些特殊情况下我应该如何运行它?
  • [我不知道 pacman] 通常:(作为 root)ldconfigldconfig -v 以获得更多详细信息。您的 .so 文件应显示在输出中。 (如果不是:您的配置文件有问题)

标签: linux postgresql postgis archlinux


【解决方案1】:

我有类似的问题,但解决方法有点不同:

dbname=#\dx

  Name   | Version |   Schema   |                             Description
---------+---------+------------+---------------------------------------------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
 postgis | 2.1.5   | postgis    | PostGIS geometry, geography, and raster spatial types and functions


dbname=#ALTER EXTENSION postgis UPDATE TO '2.2.0';
dbname=#\dx

  Name   | Version |   Schema   |                             Description
---------+---------+------------+---------------------------------------------------------------------
 plpgsql | 1.0     | pg_catalog | PL/pgSQL procedural language
 postgis | 2.2.0   | postgis    | PostGIS geometry, geography, and raster spatial types and functions

【讨论】:

  • 刚刚在 OS X (Homebrew) 上从 2.1.7 升级到 PostGIS 2.2.0,这个解决方案对我有用。谢谢!
  • 这是升级已经安装在数据库中的postgis扩展的官方方式,所以应该比其他答案更可取
【解决方案2】:

符号链接指向“共享”文件,用于CREATE EXTENSION 和家庭。你需要的是指向pg_config --pkglibdir返回的目录中的.so文件:

$ rm /opt/pgsql-9.3/lib/postgis-2.1 # it is a wrong link, so undo it
$ ln -s /usr/lib/postgresql/postgis-2.1.so /opt/pgsql-9.3/lib/

现在 PostGIS .so 文件将位于 "$libdir" 中,您将能够执行 pg_dumpall

当然,保持这种状态并不会让我觉得设置很正常,但作为您的升级,我假设这只是一个中间状态,之后您将完全删除 PostgreSQL 9.3。您还必须验证 PostGIS 是否与 9.3 库链接,否则您可能会遇到一些问题。

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。我对 Docker 的解决方案是:

    docker exec -i $(docker-compose ps -q postgis) ln -s /usr/lib/postgresql/9.6/lib/postgis-2.3.so /usr/lib/postgresql/9.6/lib/postgis-2.1.so
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      • 2018-02-05
      • 2017-04-28
      • 1970-01-01
      • 2022-12-12
      相关资源
      最近更新 更多