Подтвердить что ты не робот

Установка Postgis: типа "геометрия" не существует

Я пытаюсь создать таблицу с Postgis. Я делаю это с помощью страница. Но когда я импортирую файл postgis.sql, я получаю много ошибок:

ERROR:  type "geometry" does not exist

Кто-нибудь знает, как я могу это исправить?

4b9b3361

Ответ 1

У меня была та же проблема, но она была исправлена, выполнив следующий код

CREATE EXTENSION postgis;

Подробно,

  • открыть pgAdmin
  • выберите (щелкните) свою базу данных
  • щелкните значок "SQL" на панели
  • запустить "CREATE EXTENSION postgis;" код

Ответ 2

Чтобы заставить 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.

Ответ 3

Если Postgis-Extension загружен, ваш SQL, возможно, не найдет геометрию из-за отсутствия пути поиска к общедоступной схеме.

Попробуйте

SET search_path =..., public;

в первой строке вашего scsript. (замените... на другие требуемые пути поиска)

Ответ 4

Вы можете сделать это с терминала:

psql mydatabasename -c "CREATE EXTENSION postgis";

Ответ 5

Вы должны включить расширение в своей базе данных.

psql my_database -c "CREATE EXTENSION postgis;"

Ответ 6

Вы также должны убедиться, что пользователь, которого вы пытаетесь использовать как расширение postgis, имеет доступ к схеме, в которой настраивается postgis (которую в прочитанных мною руководствах называют "postgis").

У меня просто была эта ошибка, и она была решена, потому что я только дал новому пользователю доступ к базе данных. В базе данных, которую я создал, я запустил:

grant all on schema postgis to USERNAME; 

И это решило эту ошибку

Ответ 7

Ответы здесь могут решить вашу проблему, однако, если у вас уже включен postgis для вашей БД, проблема может заключаться в том, что вы пытаетесь восстановить таблицу postgis (с столбцом геометрии) в схему, отличную от той, где ваше расширение postgis включен. В pgAdmin вы можете нажать на расширение postgis и посмотреть, какая схема указана. Если вы пытаетесь восстановить таблицу с геометрическим столбцом в другую схему, вы можете получить эту ошибку.

Я решил это, изменив мое расширение postgis - однако я не уверен, что это был лучший способ сделать это. Все, что я знаю, это то, что это позволило мне восстановить таблицу.

Ответ 8

Или...

cursor.execute('create extension postgis')

в вашей программе python, используя текущий курсор из psycopg2.

Ответ 9

Сначала убедитесь, что у вас есть (соответствует версии pg: psql -V) postgis:

sudo apt install postgis postgresql-9.6-postgis-2.3

Непосредственно перед созданием таблиц добавьте:

db.engine.execute('create extension postgis') 
db.create_all()

Ответ 10

Эта ошибка также может возникнуть, если вы попытаетесь использовать типы 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.