Додайте просторові функції PostGIS до спеціальної схеми, відмінної від "public", у PostgreSQL


15

Нещодавно я створив базу даних PostGIS 2.0.3 на сервері баз даних PostgreSQL 9.1 за допомогою pgAdmin. Розширення "PostGIS" було знайдено встановленим у "Розширеннях". Усі просторові функції були додані до схеми "public". Це чудово.

Тепер я хочу зберігати всі свої дані в новій схемі під назвою "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 підтримує геометричні типи даних споконвічно . Але вам не слід довіряти цьому в Geo Contexts, оскільки метадані 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.