Використовуєте схему, що не є публічною в 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 для додавання даних у власну схему, відмінну від загальнодоступної.
alextc

1
Це має бути прийнятою відповіддю.
Кенні Евітт

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

  2. Виходячи зі статей, з якими ви посилаєтесь, проблема із збереженням у відкритому доступі полягає в тому, що коли ви скидаєте дані, ви, ймовірно, отримаєте системні таблиці та зв’язки, змішані з вашими даними. Якщо ви перемістите всі свої дані до нової схеми, вам більше не доведеться турбуватися про це.

  3. Жодних проблем. (Для доказу зауважте, що вам не потрібно вказувати public.spatial_ref_sys, коли потрібно шукати таблицю SRS.)


6

Ще одна порада (можливо, ви вже натрапили на це). Ви, ймовірно, захочете додати схему "дані" до пошуку_path за замовчуванням користувача. Щось на зразок:

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

Щодо точки 2, іноді вам потрібно відновити, коли у вас більше немає доступу до оригінальної БД. (Це одна з причин резервного копіювання ...), тому ви, можливо, не матимете шансів перемістити свої дані до окремої схеми, коли вам це потрібно.


1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.