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


97

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

ERROR:  type "geometry" does not exist

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

Ответы:


207

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

CREATE EXTENSION postgis;

В деталях,

  1. открыть pgAdmin
  2. выберите (щелкните) вашу базу данных
  3. щелкните значок «SQL» на панели
  4. запустить «СОЗДАТЬ РАСШИРЕНИЕ postgis; код

3
Спасибо. Кстати, если кто-то использует psql для запуска этого кода, убедитесь, что роль имеет атрибут / привилегию «Суперпользователь».
Ян

2
СПАСАТЕЛЬ ЖИЗНИ! Я думал, что уже настроил это, поэтому я продолжал думать, что это что-то еще ...
Джеймс111,

2
Обратите внимание, что это относится к конкретной базе данных, которую вы используете. Это не для всей установки.
частота

1
Я поставил pg_dump обратно, и возникла та же проблема. Мое расширение postgis помещает данные в специальную СХЕМУ с именем postgis. Мне нужно было выполнить следующую команду, и все снова стало хорошо:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
doekman

23

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

Пытаться

SET search_path = ..., общедоступный;

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



18

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

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

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

ldconfig

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


6

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


5

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

psql my_database -c "CREATE EXTENSION postgis;"


3

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

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

grant all on schema postgis to USERNAME; 

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


1

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

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


до версии Postgis 2.3 вы могли переместить расширение в другую схему, которая несколько раз решала эту проблему для меня
Даниэль Тулп

0

Или...

cursor.execute('create extension postgis')

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


0

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

sudo apt install postgis postgresql-9.6-postgis-2.3

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

db.engine.execute('create extension postgis') 
db.create_all()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.