Я намагаюся створити таблицю за допомогою Postgis. Я роблю це на цій сторінці . Але коли я імпортую файл postgis.sql, я отримую багато помилок:
ERROR: type "geometry" does not exist
Хтось знає, як я можу це виправити?
Я намагаюся створити таблицю за допомогою Postgis. Я роблю це на цій сторінці . Але коли я імпортую файл postgis.sql, я отримую багато помилок:
ERROR: type "geometry" does not exist
Хтось знає, як я можу це виправити?
Відповіді:
У мене була та ж проблема, але її було виправлено запуском наступного коду
CREATE EXTENSION postgis;
Детально,
postgis
. Мені потрібно було виконати таку команду, і все знову було добре:DO $$ BEGIN EXECUTE 'alter database '||current_database()||' set search_path = "$user", public, lookup, postgis'; END; $$ ;
Ви можете зробити це з терміналу:
psql mydatabasename -c "CREATE EXTENSION postgis";
Щоб змусити psql зупинитися при першій помилці, скористайтесь -v ON_ERROR_STOP=1
(яка за замовчуванням вимкнена , саме тому ви бачите багато помилок). Наприклад:
psql -U postgres -d postgis -v ON_ERROR_STOP=1 -f postgis.sql
Фактична помилка - це щось на зразок "не вдалося завантажити бібліотеку X", яка може залежати від вашої ситуації. Як припущення, спробуйте цю команду перед тим, як встановлювати скрипт sql:
ldconfig
(можливо, вам знадобиться префікс, sudo
залежно від вашої системи). Ця команда оновлює шляхи до всіх системних бібліотек, таких як GEOS.
Ви повинні увімкнути розширення у вашій базі даних.
psql my_database -c "CREATE EXTENSION postgis;"
Ця помилка може також виникнути, якщо ви намагаєтесь використовувати типи 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, має доступ до схеми, де налаштовано postgis (що в підручниках, які я читав, називається "postgis").
У мене щойно виникла ця помилка, і вона була вирішена, оскільки я лише надав новому користувачеві доступ до бази даних. У створеній мною базі даних я запустив:
grant all on schema postgis to USERNAME;
І це вирішило цю помилку
Наведені тут відповіді можуть вирішити вашу проблему, однак, якщо у вашій БД уже увімкнено postgis, проблема може полягати в тому, що ви намагаєтесь відновити таблицю postgis (зі стовпцем геометрії) у схему, відмінну від тієї, де ввімкнено ваше розширення postgis. У pgAdmin ви можете натиснути на розширення postgis і побачити, яка схема вказана. Якщо ви намагаєтесь відновити таблицю з геометричним стовпцем в іншій схемі, ви можете отримати цю помилку.
Я вирішив це, змінивши своє розширення postgis - однак я не впевнений, чи це був найкращий спосіб зробити це. Я знаю лише те, що це дозволило мені відновити таблицю.