Verwenden Sie ein anderes Schema als public in PostGIS?


20

Ich richte gerade eine Neuinstallation von PostGIS 2.0.2 und PostgreSQL 9.1.6 unter Ubuntu ein. Ich bin kürzlich auf einige Informationen gestoßen, die darauf hinweisen, dass die Verwendung des öffentlichen Schemas zum Speichern aller Daten keine gute Idee ist.

Aus diesem Grund habe ich ein Schema namens "data" eingerichtet und mich selbst zum Eigentümer gemacht. Aber ist das eine gute Idee?

Meine Anliegen sind:

  1. Beim Erstellen dieses neuen Schemas (über pgAdmin III) muss ich möglicherweise nicht nur den Eigentümer festlegen, sondern auch die Einstellungen auf der Registerkarte Berechtigungen berücksichtigen.
  2. Ich kann möglicherweise nicht die gleichen Vorteile erzielen, wenn ich meine Daten im öffentlichen Schema speichere und alle Daten in einem separaten Schema abspeichere, bevor ich eine Sicherung / Wiederherstellung durchführe (dies würde bei Verwendung von ogr2ogr einige Tastenanschläge einsparen). und
  3. Es kann zu Problemen kommen, wenn in meinem neuen Datenschema nicht die PostGIS-Standardtabellen und -sichten vorhanden sind (diese befinden sich im öffentlichen Schema in derselben Datenbank).

1
Schauen Sie sich die neue Antwort hier an: gis.stackexchange.com/a/270522/6052
Evan Carroll

3
Ja, es ist noch gültig. Das Wichtigste ist, dass es sauberer ist, da Sie Benutzerdaten von Systemdaten und -funktionen trennen.
John Powell

Ich bin kein PostGIS-Benutzer, aber ich vermute, dass die beste Antwort auf Ihre Frage jetzt gis.stackexchange.com/a/270522/115 lautet. Wenn Sie also zustimmen, würde ich Sie ermutigen, das Häkchen für Akzeptieren darauf zu setzen.
PolyGeo

1
Diese Frage sollte zwei Fragen sein. Die akzeptierte Antwort beantwortet die Frage nicht wie geschrieben. Diese Frage sollte erneut geöffnet werden, da es sich NICHT um ein Duplikat dieser Frage handelt, bei der gefragt wird, ob die PostGIS-Objekte selbst mit Objekten arbeiten können, die nicht im publicSchema enthalten sind. Bei dieser anderen Frage geht es darum, die PostGIS-Erweiterungsobjekte in einem anderen Schema als zu installieren public. Das sind zwei verschiedene Dinge!
Kenny Evitt

Antworten:


5

Dies wird jetzt auf der offiziellen Website auf einer Seite mit dem Titel PostGIS-Erweiterung in ein anderes Schema verschieben behandelt . Die richtige Methode ist, die Erweiterung zu installieren public. Dies ist die einzige Option. Die Erweiterung unterstützt keinen Umzug mehr. Als Nächstes müssen Sie die folgenden Befehle ausführen (von der Site kopiert):

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

ALTER EXTENSION postgis 
  SET SCHEMA postgis;

2
Dies beantwortet die Frage NICHT wie geschrieben; Es sollte NICHT die akzeptierte Antwort sein. Es wird eindeutig gefragt, ob in meinem neuen dataSchema nicht die standardmäßigen PostGIS-Tabellen und -Ansichten enthalten sind (sie befinden sich im publicSchema in derselben Datenbank). Diese Antwort ist nützlich und genau das, wonach ich gesucht habe, hat aber keinen direkten Bezug zur Frage.
Kenny Evitt

20

Wenn Sie eine PostGIS-Datenbank räumlich aktivieren, werden die relevanten Funktionen, die SRS-Tabelle und die Ansichten, wie Sie angeben, im öffentlichen Schema platziert. Dies bedeutet nicht, dass sich alle oder einige Ihrer eigenen räumlichen Tabellen im selben öffentlichen Schema befinden müssen. PostGIS wird weiterhin mit allen räumlichen Daten in den "neuen" Schemata arbeiten.

Tatsächlich platziere ich meine anwendungsspezifischen Tabellen normalerweise in einem separaten Schema. Auf diese Weise können Sie Ihre anwendungsspezifischen Tabellensicherungen und -wiederherstellungen, wenn Sie ein Hauptversionsupgrade auf PostGIS durchführen müssen, als separate Prozedur von derjenigen aufbewahren, die die räumlichen Tools ersetzt.

Also, ich denke, es geht dir gut. Falls Sie dies noch nicht getan haben, empfiehlt es sich, das neue Schema dem Suchpfad hinzuzufügen:

ALTER DATABASE my_db SET search_path = gc, public;


Vielen Dank, Martin. Bedeutet dies, dass ich räumliche Funktionen für Tabellen in einem anderen benutzerdefinierten Schema als "public" verwenden kann?
Alextc

Wie fügt man Daten zu einem anderen Schema hinzu, z. nicht public? Daten hinzufügen mit zB. shp2psqlzu test.tablesetzt noch Daten in public?
Knutole

@knutole. Wie bereits erwähnt, habe ich ArcCatalog zum Importieren / Hinzufügen neuer Feature-Classes verwendet. Ich bin nicht sicher, ob Sie shp2psql verwenden können, um Daten zu einem benutzerdefinierten Schema hinzuzufügen, das nicht öffentlich ist.
Alextc

1
Dies sollte die akzeptierte Antwort sein.
Kenny Evitt

12
  1. Eine der möglichen Organisationsstrategien, die Sie mit Schemas entwickeln können, besteht darin, einem Benutzer die Möglichkeit zu geben, in einem Schema zügellos zu arbeiten, in einem anderen jedoch keine Probleme zu verursachen. Wenn Sie also Schemas auf diese Weise verwenden möchten, können Sie dies auf der Registerkarte Berechtigungen von pgAdmin tun. Dies ist jedoch nicht erforderlich. Wenn Sie also nur dieselben Berechtigungen für mehrere Schemas beibehalten möchten, ist dies in Ordnung.

  2. Basierend auf den Artikeln, mit denen Sie verlinkt haben, besteht das Problem darin, dass beim Sichern von Daten wahrscheinlich Systemtabellen und -beziehungen mit Ihren Daten gemischt werden. Wenn Sie alle Ihre Daten in ein neues Schema verschieben, müssen Sie sich darüber nie wieder Gedanken machen.

  3. Überhaupt keine Probleme. (Beachten Sie zum Beweis, dass Sie public.spatial_ref_sys nicht angeben müssen, wenn Sie die SRS-Tabelle durchsuchen möchten.)


6

Ein zusätzlicher Tipp (vielleicht sind Sie schon darauf gestoßen). Möglicherweise möchten Sie das Schema "data" zum Standardsuchpfad des Benutzers hinzufügen. So etwas wie:

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

In Bezug auf Punkt 2 müssen Sie manchmal wiederherstellen, wenn Sie keinen Zugriff mehr auf die ursprüngliche Datenbank haben. (Dies ist einer der Gründe für Backups ...) Sie haben möglicherweise nicht die Möglichkeit, Ihre Daten in ein separates Schema zu verschieben, wenn Sie sie tatsächlich benötigen.


1

Wir verwenden das öffentliche Schema für temporäre Analyse- / Entwicklertabellenergebnisse und greifen dann auf besser organisierte Schemata (Ordner?) Zur dauerhaften Verwendung zurück.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.