Używasz schematu innego niż publiczny w PostGIS?

21

Obecnie konfiguruję nową instalację PostGIS 2.0.2 i PostgreSQL 9.1.6 na Ubuntu. Ostatnio natknąłem się na pewne informacje wskazujące, że używanie publicznego schematu do przechowywania wszystkich danych nie jest dobrym pomysłem.

Z tego powodu utworzyłem schemat o nazwie dane i zostałem właścicielem, ale czy to dobry pomysł?

Moje obawy to:

  1. Oprócz ustawienia właściciela, może być konieczne zwrócenie uwagi na rzeczy na karcie Uprawnienia podczas tworzenia tego nowego schematu (poprzez pgAdmin III);
  2. Nie mogę uzyskać takich samych korzyści, przechowując moje dane w schemacie publicznym i zrzucając wszystkie dane do osobnego schematu przed utworzeniem kopii zapasowej / przywracania (zaoszczędziłoby to kilka naciśnięć klawiszy podczas korzystania z ogr2ogr); i
  3. Mogę wpaść w kłopoty, ponieważ nie mam domyślnych tabel i widoków PostGIS w moim nowym schemacie danych (są one w schemacie publicznym w tej samej bazie danych).
Paweł
źródło
1
Sprawdź nową odpowiedź tutaj gis.stackexchange.com/a/270522/6052
Evan Carroll
3
Tak, nadal jest ważny. Najważniejsze jest to, że jest czystszy, ponieważ oddzielasz dane użytkownika od danych systemowych i funkcji.
John Powell,
Nie jestem użytkownikiem PostGIS, ale podejrzewam, że najlepszą odpowiedzią na twoje pytanie może być teraz gis.stackexchange.com/a/270522/115, więc jeśli się zgodzisz, zachęcam do przeniesienia na to pola wyboru Akceptuj.
PolyGeo
1
To pytanie powinno składać się z dwóch pytań. Przyjęta odpowiedź nie odpowiada na pytanie w formie pisemnej. To pytanie powinno zostać ponownie otwarte, ponieważ NIE jest duplikatem tego pytania, które pyta, czy obiekty PostGIS mogą same pracować z obiektami spoza publicschematu. To drugie pytanie dotyczy instalacji obiektów rozszerzenia PostGIS w schemacie innym niż public. To dwie różne rzeczy!
Kenny Evitt,

Odpowiedzi:

7

Jest to teraz rozwiązane na oficjalnej stronie na stronie zatytułowanej Przenieś rozszerzenie PostGIS do innego schematu . Poprawną metodą jest zainstalowanie rozszerzenia public. To jedyna opcja. Rozszerzenie nie obsługuje już relokacji. Następną rzeczą jest uruchomienie następujących poleceń (skopiowanych z witryny),

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;
Evan Carroll
źródło
2
To NIE odpowiada na pytanie w formie pisemnej; to NIE powinna być zaakceptowana odpowiedź. Jest wyraźnie prosząc o „nie mając tabele domyślne postgis i widoki w moim nowym dataschemacie (są w publicschemacie w obrębie tej samej bazy danych)”. Ta odpowiedź jest przydatna i tego właśnie szukałem, ale nie jest ona bezpośrednio związana z pytaniem.
Kenny Evitt,
20

Po włączeniu przestrzennym bazy danych PostGIS odpowiednie funkcje, tabela SRS i widoki są umieszczane w schemacie publicznym, jak sam twierdzisz. Nie oznacza to, że wszystkie lub dowolne z twoich tabel przestrzennych muszą znajdować się w tym samym schemacie publicznym. PostGIS nadal będzie działał na wszystkich danych przestrzennych w „nowych” schematach.

W rzeczywistości zazwyczaj umieszczam tabele specyficzne dla aplikacji w osobnym schemacie. W ten sposób, jeśli musisz dokonać aktualizacji głównej wersji do PostGIS, możesz zachować kopie zapasowe tabel specyficzne dla aplikacji i przywracać je jako oddzielną procedurę niż ta, która zastępuje narzędzia przestrzenne.

Więc myślę, że masz się dobrze. Na koniec, jeśli jeszcze tego nie zrobiłeś, dobrym pomysłem jest dodanie nowego schematu do ścieżki wyszukiwania:

ALTER DATABASE my_db SET search_path = gc, public;

Martin F.
źródło
Dzięki Martin. Czy to oznacza, że ​​mogę używać funkcji przestrzennych na tabelach w niestandardowym schemacie innym niż „publiczny”?
alextc
Jak dodać dane do innego schematu, tj. nie public? Dodawanie danych za pomocą np. shp2psqldo test.tablenadal stawia dane public?
knutole
@knutole. Jak wspomniałem, użyłem ArcCatalog do importowania / nowych klas funkcji. Nie jestem pewien, czy możesz użyć shp2psql, aby dodać dane do niestandardowego schematu innego niż publiczny.
alextc
1
To powinna być zaakceptowana odpowiedź.
Kenny Evitt,
12
  1. Jedną z możliwych strategii organizacyjnych, które można zbudować za pomocą schematów, jest umożliwienie użytkownikowi uruchomienia szalejącego w jednym schemacie, ale niemożności zepsucia się w innym. Jeśli więc chcesz używać schematów w ten sposób, możesz to zrobić na karcie uprawnień w pgAdmin. Ale nie jest to wymagane, więc jeśli chcesz zachować te same uprawnienia w wielu schematach, to dobrze.

  2. W oparciu o artykuły, z którymi się łączysz, problem z utrzymywaniem wszystkiego w miejscu publicznym polega na tym, że kiedy zrzucisz dane, prawdopodobnie zmieszasz tabele systemowe i relacje z danymi. Jeśli przeniesiesz wszystkie dane do nowego schematu, nie musisz się o to więcej martwić.

  3. Żaden problem. (Na dowód zauważ, że nie musisz określać public.spatial_ref_sys, jeśli chcesz przeszukać tabelę SRS.)

L_Holcombe
źródło
6

Jedna dodatkowa wskazówka (może już to natrafiłeś). Prawdopodobnie będziesz chciał dodać schemat „danych” do domyślnej ścieżki wyszukiwania użytkownika. Coś jak:

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

Jeśli chodzi o punkt 2, czasami musisz przywrócić, gdy nie masz już dostępu do oryginalnej bazy danych. (To jeden z powodów tworzenia kopii zapasowych ...), więc możesz nie mieć szansy na przeniesienie danych do osobnego schematu, kiedy naprawdę go potrzebujesz.

Micha
źródło
1

Używamy publicznego schematu do tymczasowej analizy / wyników tabeli deweloperów, a następnie przechodzimy do bardziej zorganizowanych schematów (folderów?) Do stałego użytku.

DPSSpatial
źródło