Установка Postgis: тип «геометрия» не существует - PullRequest
76 голосов
/ 28 июля 2011

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

ERROR:  type "geometry" does not exist

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

Ответы [ 9 ]

150 голосов
/ 07 января 2014

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

CREATE EXTENSION postgis;

Подробно,

  1. открыть pgAdmin
  2. выберите (щелкните) свою базу данных
  3. щелкните значок «SQL» на панели
  4. запустить "CREATE EXTENSION postgis"; код
19 голосов
/ 28 июля 2011

Чтобы psql остановился при первой ошибке, используйте -v ON_ERROR_STOP=1 (по умолчанию отключено , поэтому вы видите много ошибок).Например:

psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql

Фактическая ошибка - что-то вроде «не удалось загрузить библиотеку X», которая может варьироваться в зависимости от вашей ситуации.Предположим, попробуйте эту команду перед установкой сценария sql:

ldconfig

(вам может потребоваться префикс sudo в зависимости от вашей системы).Эта команда обновляет пути ко всем системным библиотекам, таким как GEOS.

18 голосов
/ 05 апреля 2015

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

Попробуйте

SET search_path =..., public;

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

17 голосов
/ 22 января 2015

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

psql mydatabasename -c "CREATE EXTENSION postgis";
3 голосов
/ 30 января 2015

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

psql my_database -c "CREATE EXTENSION postgis;"

2 голосов
/ 27 сентября 2018

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

grant all on schema postgis to USERNAME; 

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

1 голос
/ 18 октября 2016

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

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

0 голосов
/ 27 сентября 2018

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

sudo apt install postgis postgresql-9.6-postgis-2.3

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

db.engine.execute('create extension postgis') 
db.create_all()
0 голосов
/ 13 ноября 2014

Или ...

cursor.execute('create extension postgis')

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

...