Используете схемы, отличные от public в PostGIS?


21

В настоящее время я устанавливаю новую версию PostGIS 2.0.2 и PostgreSQL 9.1.6 в Ubuntu. Недавно я наткнулся на некоторую информацию о том, что использование публичной схемы для хранения всех данных не очень хорошая идея.

По этой причине я создал схему с именем data и стал владельцем, но это хорошая идея?

Мои опасения:

  1. Помимо установки владельца, мне может понадобиться обратить внимание на вещи на вкладке Привилегии при создании этой новой схемы (через pgAdmin III);
  2. Я не могу получить те же преимущества, храня свои данные в общедоступной схеме и выгружая все данные в отдельную схему перед выполнением резервного копирования / восстановления (это позволит сэкономить несколько нажатий клавиш при использовании ogr2ogr); и
  3. У меня могут возникнуть проблемы из-за отсутствия таблиц и представлений PostGIS по умолчанию в моей новой схеме данных (они находятся в общедоступной схеме в одной базе данных).

1
Ознакомьтесь с новым ответом здесь gis.stackexchange.com/a/270522/6052
Эван Кэрролл

3
Да, это все еще в силе. Главное, что он чище, поскольку вы отделяете пользовательские данные от системных данных и функций.
Джон Пауэлл

Я не являюсь пользователем PostGIS, но подозреваю, что лучшим ответом на ваш вопрос теперь может быть gis.stackexchange.com/a/270522/115, поэтому, если вы согласитесь, я рекомендую вам перенести на него галочку Accept.
PolyGeo

1
Этот вопрос должен быть два вопроса. Принятый ответ не отвечает на вопрос в письменном виде. Этот вопрос следует повторно открыть, поскольку он НЕ является дубликатом этого вопроса, который задает вопрос, могут ли объекты PostGIS сами работать с объектами, не publicвходящими в схему. Другой вопрос касается установки объектов расширения PostGIS в схему, отличную от public. Это две разные вещи!
Кенни Эвитт

Ответы:


7

Это теперь решается на официальном сайте на странице под названием Переместить расширение PostGIS в другую схему . Правильный метод - установить расширение в public. Это единственный вариант. Расширение больше не поддерживает перемещение. Далее нужно выполнить следующие команды (скопировано с сайта),

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
Это НЕ отвечает на вопрос как написано; он должен НЕ быть приемлемым ответом. Он ясно спрашивает о «не имея таблицы с PostGIS по умолчанию и представления в моей новой dataсхеме (они находятся в publicсхеме в одной и той же базе данных)». Этот ответ полезен, и это то, что я искал, но он не имеет прямого отношения к вопросу.
Кенни Эвитт

20

Когда вы пространственно включаете базу данных PostGIS, соответствующие функции, таблица SRS и представления помещаются в общедоступную схему, как вы заявляете. Это не означает, что все или любые ваши собственные пространственные таблицы должны быть в одной общедоступной схеме. PostGIS по-прежнему будет работать со всеми пространственными данными в «новых» схемах.

Фактически, я обычно помещаю свои таблицы для приложений в отдельную схему. Таким образом, если вам необходимо обновить основную версию до PostGIS, вы можете сохранить резервные копии и восстановление таблиц для своего приложения в качестве отдельной процедуры от процедуры, заменяющей пространственные инструменты.

Так что, я думаю, у тебя все хорошо. Наконец, если вы еще этого не сделали, рекомендуется добавить новую схему в путь поиска:

ALTER DATABASE my_db SET search_path = gc, public;


Спасибо Мартин. Означает ли это, что я могу использовать пространственные функции для таблиц в пользовательской схеме, отличной от "public"?
alextc

Как вы добавляете данные в другую схему, т.е. нет public? Добавление данных с помощью, например. shp2psqlпо - test.tableпрежнему ставит данные public?
Кнутоль

@knutole. Как я уже упоминал, я использовал ArcCatalog для импорта / новых классов объектов. Я не уверен, что вы можете использовать shp2psql для добавления данных в пользовательскую схему, отличную от public.
alextc

1
Это должен быть принятый ответ.
Кенни Эвитт

12
  1. Одна из возможных организационных стратегий, которую вы можете построить с помощью схем, - разрешить пользователю безудержно работать в одной схеме, но не сможет испортить ситуацию в другой. Поэтому, если вы хотите использовать схемы таким способом, это можно сделать на вкладке привилегий pgAdmin. Но это не обязательно, так что если вы просто хотите поддерживать одинаковые привилегии для нескольких схем, это нормально.

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

  3. Не беда, вообще. (Для доказательства обратите внимание, что вам не нужно указывать public.spatial_ref_sys, когда вы хотите выполнить поиск в таблице SRS.)


6

Еще один совет (возможно, вы уже сталкивались с этим). Вы, вероятно, захотите добавить схему «data» в путь поиска пользователя по умолчанию. Что-то вроде:

ALTER USER <your_user_name> SET search_path=public,data,$USER; 

Что касается вашей точки 2, иногда вам нужно восстановить, когда у вас больше нет доступа к исходной БД. (Это одна из причин создания резервных копий ...) поэтому у вас может не быть возможности переместить ваши данные в отдельную схему, когда она вам действительно понадобится.


1

Мы используем открытую схему для временного анализа / результатов таблицы разработчиков, а затем переходим к более организованным схемам (папкам?) Для постоянного использования.

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