Переход с 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