Переход с postgresql 9.3 на 9.4, postgis

Я обновил 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": такого файла или каталога нет

Я как бы вне идей. Может быть, кто-то может мне помочь?

Я использую арку Linux

PS

Постгис установлен:

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

3 ответа

Решение

Символическая ссылка указывает на файлы "share", используемые для CREATE EXTENSION и семья. Что вам нужно, это указать .so файлы внутри каталога, возвращаемые pg_config --pkglibdir:

$ 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, в противном случае у вас могут возникнуть некоторые проблемы.

У меня похожая проблема, но я решаю ее немного иначе:

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

У меня такая же проблема. Мое решение с 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
Другие вопросы по тегам