Добавьте пространственные функции PostGIS в пользовательскую схему, отличную от «public» в PostgreSQL


15

Недавно я создал базу данных PostGIS 2.0.3 на сервере базы данных PostgreSQL 9.1, используя pgAdmin. Обнаружено, что расширение «PostGIS» установлено в «Расширения». Все пространственные функции были добавлены в «публичную» схему. Все в порядке.

Теперь я хочу сохранить все свои данные в новой схеме под названием «gc». Однако как я могу сделать все пространственные функции установленными в этой схеме "gc"? В схеме нет ни одной функции. Однако когда я попытался импортировать / создать новый класс объектов из ESRI ArcCatalog 10.1 в этой схеме, это сработало! Класс объектов может быть импортирован и отображен в QGIS.

Может ли кто-нибудь дать мне совет или идею по этому поводу?

Я новичок в PostgreSQL и PostGIS.


Только что заметил: уже рассматривался на gis.stackexchange.com/questions/43187/…
Martin F

@MartinF Там является (незавершенным) ответ на этот вопрос на вопрос , к которому вы связаны , но этот вопрос действительно прошу что - то совсем другое.
Кенни Эвитт

Этот вопрос также может быть назван «Установка PostGIS в схему, отличную от общедоступной?».
Кенни Эвитт

Ответы:


3

Вот примеры команд для установки расширения PostGIS в gcсхему:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Вот примеры команд для перемещения PostGIS и его объектов в новую схему для версии 2.4.4 PostGIS, если вы уже установили ее:

CREATE SCHEMA gc;

UPDATE pg_extension
SET extrelocatable = TRUE
WHERE extname = 'postgis';

ALTER EXTENSION postgis
SET SCHEMA gc;

ALTER EXTENSION postgis
UPDATE TO "2.4.4next";

ALTER EXTENSION postgis
UPDATE TO "2.4.4";

Это не строго необходимо; просто полезно:

ALTER DATABASE whatever
SET search_path = public,gc;

1

Кенни Эвитт уже объяснил самые важные вещи. Тем не менее, вот дополнительная информация:

Postgresql имеет базы данных, табличные пространства и схемы, и невозможно выполнять соединения из одной базы данных в другую, поскольку они строго разделены. Одна база данных может иметь более одной схемы, и можно объединить что-то из одной схемы в другую. Для получения дополнительной информации, посмотрите на документы:

Другая возможность загрузить PostGIS в вашу схему gc:

t=# create schema gc;
CREATE SCHEMA
t=# set search_path to gc;
SET
t=# create extension postgis;
CREATE EXTENSION

Я не являюсь экспертом ни по Arc Catalog, ни по pgadmin, но я предполагаю, что произошла одна из следующих трех возможностей:

  1. Postgresql изначально поддерживает геометрические типы данных . Но вы не должны доверять этому в географическом контексте, потому что метаданные CRS, а также функции преобразования не предоставляются. Тебе просто повезло, и ничего не сломалось.
  2. Arc Catalog каким-то образом, не найдя расширение PostGIS, создал его, не уведомив об этом пользователя. Чтобы проверить это, вы можете посмотреть на существующие таблицы до и после этого шага.

В psql вы можете сделать это, набрав:

\d
           List of Relations
 Schema |       Name        |   Type  | Owner 
--------+-------------------+---------+----------
 gc     | geography_columns | View    | postgres
 gc     | geometry_columns  | View    | postgres
 gc     | raster_columns    | View    | postgres
 gc     | raster_overviews  | View    | postgres
 gc     | spatial_ref_sys   | Table   | postgres

Если вы видите это, PostGIS был установлен как расширение. Третья возможность состоит в том, что ArcCatalog делает что-то вроде этого:

set search_path to $all_schemas;
import to gc;

В этом случае вам тоже просто повезло. Но, возможно, в конце концов ArcCatalog сделает что-то более сложное ...


0

вот ваше решение:

CREATE SCHEMA gc;

CREATE EXTENSION postgis SCHEMA gc;

Если вы уже установили расширение postGIS в общедоступной схеме и хотите перейти в gc, напишите следующий код:

UPDATE pg_extension 
  SET extrelocatable = TRUE 
    WHERE extname = 'postgis';

ALTER EXTENSION postgis 
  SET SCHEMA gc;
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.