Встановлення Postgis: тип "геометрія" не існує


95

Я намагаюся створити таблицю за допомогою Postgis. Я роблю це на цій сторінці . Але коли я імпортую файл postgis.sql, я отримую багато помилок:

ERROR:  type "geometry" does not exist

Хтось знає, як я можу це виправити?

Відповіді:


201

У мене була та ж проблема, але її було виправлено запуском наступного коду

CREATE EXTENSION postgis;

Детально,

  1. відкрити pgAdmin
  2. виберіть (клацніть) вашу базу даних
  3. натисніть значок "SQL" на панелі
  4. запустити "СТВОРИТИ РОЗШИРЕННЯ postgis;" код

3
Дякую. До речі, якщо хтось використовує 'psql' для запуску цього коду, переконайтесь, що роль має атрибут / привілеї 'Суперкористувач'.
Ян

2
ЕКОНОМІЯ ЖИТТЯ! Я думав, що це вже налаштував, тому продовжував думати, що це щось інше ...
James111

2
Зверніть увагу, що це стосується конкретної бази даних, яку ви використовуєте. Це не для всієї установки.
fooquency

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

23

Якщо завантажено розширення Postgis, тоді ваш SQL, можливо, не знаходить типу геометрії через відсутність шляху пошуку до загальнодоступної схеми.

Спробуйте

ВСТАНОВИТИ path_path = ..., public;

у першому рядку вашого script. (замінити ... іншими необхідними шляхами пошуку)



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.


5

Ви повинні увімкнути розширення у вашій базі даних.

psql my_database -c "CREATE EXTENSION postgis;"


5

Ця помилка може також виникнути, якщо ви намагаєтесь використовувати типи 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;

Потім ви можете перейти до використання функцій постгіса.


3

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

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

grant all on schema postgis to USERNAME; 

І це вирішило цю помилку


1

Наведені тут відповіді можуть вирішити вашу проблему, однак, якщо у вашій БД уже увімкнено postgis, проблема може полягати в тому, що ви намагаєтесь відновити таблицю postgis (зі стовпцем геометрії) у схему, відмінну від тієї, де ввімкнено ваше розширення postgis. У pgAdmin ви можете натиснути на розширення postgis і побачити, яка схема вказана. Якщо ви намагаєтесь відновити таблицю з геометричним стовпцем в іншій схемі, ви можете отримати цю помилку.

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


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

0

Або ...

cursor.execute('create extension postgis')

у вашій програмі python, використовуючи поточний курсор із psycopg2.


0

Спочатку переконайтеся, що у вас встановлений (відповідний версії pg: psql -V) postgis:

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.