Я пытаюсь создать таблицу с Postgis. Я делаю это с помощью страница. Но когда я импортирую файл postgis.sql, я получаю много ошибок:
ERROR: type "geometry" does not exist
Кто-нибудь знает, как я могу это исправить?
Я пытаюсь создать таблицу с Postgis. Я делаю это с помощью страница. Но когда я импортирую файл postgis.sql, я получаю много ошибок:
ERROR: type "geometry" does not exist
Кто-нибудь знает, как я могу это исправить?
У меня была та же проблема, но она была исправлена, выполнив следующий код
CREATE EXTENSION postgis;
Подробно,
Чтобы заставить psql останавливаться при первой ошибке, используйте -v ON_ERROR_STOP=1
(который по умолчанию, поэтому вы видите много ошибок). Например:
psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql
Фактическая ошибка - это что-то вроде "невозможно загрузить библиотеку X", которая может отличаться в зависимости от вашей ситуации. Как можно предположить, попробуйте эту команду перед установкой sql script:
ldconfig
(вам может потребоваться префикс с sudo
в зависимости от вашей системы). Эта команда обновляет пути ко всем системным библиотекам, таким как GEOS.
Если Postgis-Extension загружен, ваш SQL, возможно, не найдет геометрию из-за отсутствия пути поиска к общедоступной схеме.
Попробуйте
SET search_path =..., public;
в первой строке вашего scsript. (замените... на другие требуемые пути поиска)
Вы можете сделать это с терминала:
psql mydatabasename -c "CREATE EXTENSION postgis";
Вы должны включить расширение в своей базе данных.
psql my_database -c "CREATE EXTENSION postgis;"
Вы также должны убедиться, что пользователь, которого вы пытаетесь использовать как расширение postgis, имеет доступ к схеме, в которой настраивается postgis (которую в прочитанных мною руководствах называют "postgis").
У меня просто была эта ошибка, и она была решена, потому что я только дал новому пользователю доступ к базе данных. В базе данных, которую я создал, я запустил:
grant all on schema postgis to USERNAME;
И это решило эту ошибку
Ответы здесь могут решить вашу проблему, однако, если у вас уже включен postgis для вашей БД, проблема может заключаться в том, что вы пытаетесь восстановить таблицу postgis (с столбцом геометрии) в схему, отличную от той, где ваше расширение postgis включен. В pgAdmin вы можете нажать на расширение postgis и посмотреть, какая схема указана. Если вы пытаетесь восстановить таблицу с геометрическим столбцом в другую схему, вы можете получить эту ошибку.
Я решил это, изменив мое расширение postgis - однако я не уверен, что это был лучший способ сделать это. Все, что я знаю, это то, что это позволило мне восстановить таблицу.
Или...
cursor.execute('create extension postgis')
в вашей программе python, используя текущий курсор из psycopg2.
Сначала убедитесь, что у вас есть (соответствует версии pg: psql -V) postgis:
sudo apt install postgis postgresql-9.6-postgis-2.3
Непосредственно перед созданием таблиц добавьте:
db.engine.execute('create extension postgis')
db.create_all()
Эта ошибка также может возникнуть, если вы попытаетесь использовать типы 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.