Я пытаюсь создать таблицу с помощью Postgis. Я делаю это с помощью этой страницы . Но когда я импортирую файл postgis.sql, я получаю много ошибок:
ERROR: type "geometry" does not exist
Кто-нибудь знает, как это исправить?
Ответы:
У меня была такая же проблема, но она была исправлена путем выполнения следующего кода
CREATE EXTENSION postgis;
В деталях,
postgis
. Мне нужно было выполнить следующую команду, и все снова стало хорошо:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
Сделать это можно с терминала:
psql mydatabasename -c "CREATE EXTENSION postgis";
Чтобы psql останавливался при первой ошибке, используйте -v ON_ERROR_STOP=1
(который по умолчанию отключен , поэтому вы видите много ошибок). Например:
psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql
Фактическая ошибка - это что-то вроде «не удалось загрузить библиотеку X», которая может варьироваться в зависимости от вашей ситуации. Предположительно попробуйте эту команду перед установкой sql-скрипта:
ldconfig
(вам может потребоваться префикс в sudo
зависимости от вашей системы). Эта команда обновляет пути ко всем системным библиотекам, таким как GEOS.
Эта ошибка также может возникнуть, если вы попытаетесь использовать типы postgis в другой схеме, а не вpublic
.
Если вы создаете собственную схему с использованием postgis 2.3 или выше и сталкиваетесь с этой ошибкой, сделайте следующее, как указано здесь :
CREATE SCHEMA IF NOT EXISTS my_schema;
CREATE extension postgis;
UPDATE pg_extension
SET extrelocatable = TRUE
WHERE extname = 'postgis';
ALTER EXTENSION postgis
SET SCHEMA my_schema;
ALTER EXTENSION postgis
UPDATE TO "2.5.2next";
ALTER EXTENSION postgis
UPDATE TO "2.5.2";
SET search_path TO my_schema;
Затем вы можете перейти к использованию функций postgis.
Вы должны включить расширение в своей базе данных.
psql my_database -c "CREATE EXTENSION postgis;"
Вам также необходимо убедиться, что пользователь, в качестве которого вы пытаетесь использовать расширение postgis, имеет доступ к схеме, в которой устанавливается postgis (которая в прочитанных мною учебниках называется «postgis»).
У меня только что была эта ошибка, и она была решена, потому что я дал доступ к базе данных только новому пользователю. В созданной мной базе данных я запустил:
grant all on schema postgis to USERNAME;
И это решило эту ошибку
Ответы здесь могут решить вашу проблему, однако, если у вас уже включен postgis в вашей БД, проблема может заключаться в том, что вы пытаетесь восстановить таблицу postgis (со столбцом геометрии) в схему, отличную от той, где включено ваше расширение postgis. В pgAdmin вы можете щелкнуть расширение postgis и посмотреть, какая схема указана. Если вы пытаетесь восстановить таблицу со столбцом геометрии в другую схему, вы можете получить эту ошибку.
Я решил эту проблему, изменив свое расширение postgis, однако я не уверен, что это лучший способ сделать это. Все, что я знаю, это то, что это позволило мне восстановить таблицу.