Daten- bzw. Datenbankstruktur PostgreSQL/PostGIS und QGIS

Hallo,

ich plane künftig meine bisherige GIS Software wo dies möglich ist durch QGIS zu erstezen. Um auch mit dynamischen Puffern, Verschneidungen etc. (in Form von Views) arbeiten zu können habe ich nun pgAdmin III installiert. Allerdings bin ich mir noch unsicher wie meine Daten- bzw. Datenbankstruktur aussehen soll. View Abfragen über mehrere Datenbanken sind nach meinen Recherchen nicht ohne weiteres möglich. Somit würde sich eine Datenbank pro QGIS Projekt anbieten, oder? Allerdings verwende ich auch oft Grundlagendaten(banken), welche in mehreren Projekten benötigt werden und somit künftig auch mehrfach (in den jeweiligen QGIS Projektdatenbanken) abgespeichert werden müssten. Ebenfalls arbeite ich für mehrere dutzend Auftrageber. Welche Struktur würde sich diesbezüglich in pgAdmin anbieten? Bisher habe ich nur Access (.mdb) Datenbanken verwendet, die in den jeweiligen Auftraggeberordnern und in weiterer Folge in den Projektunterordnern gepeichert wurden. In PostgreSQL ist nun alles etwas neu und anders (aber auch durchaus spannend).

Vielen Dank und schöne Grüße!

PGAdminIII ist nur ein Client, so wie auch psql und weitere, die es gibt. Die Verwaltung, sprich Speicherung der Daten, erfolgt aber komplett unabhängig vom Client in der Datenbank selbst.

Richtig ist, daß man in PostgreSQL nicht (direkt) DB-übergreifend arbeiten kann. Was geht sind aber Zugriffe auch auf andere PG-Datenbanken auf demselben oder anderen Servern via FDW (Foreign Data Wrapper), damit kann man sogar nicht nur entfernte PG-Datenbanken ansprechen, sondern so ziemlich alles mögliche von primitiven MySQL-DB’s weiter über CSV-Files und so bis hin zu zu Oraggle oder so. (Reihenfolge ist Absicht :wink: )
Wenn Du die Absicht hast, vielleicht einmal Sharding machen zu wollen, so solltest Du Dir das definitiv ansehen, 9.5 wird Sharding über diesen Weg anbieten. ( http://www.depesz.com/2015/04/02/waiting-for-9-5-allow-foreign-tables-to-participate-in-inheritance/ )

Ich denke aber, all das ist derzeit noch nicht das, was Du suchst oder brauchst. Du suchst eher einen eigenen Namespace je Projekt / Kunde. Dafür würden sich in PostgreSQL Schemas anbieten - und Du kannst dann auch schemaübergreifend Abfragen erstellen und hast vollständigen Zugriff auf alles ohne große Verrenckungen: http://www.postgresql.org/docs/9.4/static/ddl-schemas.html

Schau es Dir an, ich denke, damit kommst Du erst einmal weiter.

Danke für die schnelle und ausführliche Antwort. Dass datenbankübergreifendes Arbeiten mit FDW (als Nachfolger von dblink) möglich ist habe ich schon gelesen, allerdings hatte ich die Abkürzung zwischenzeitlich wieder vergessen. Näheres muss ich in den nächsten Tagen recherchieren.

Von Sharding höre ich zum ersten Mal, auch hier muss ich mich erst einlesen.

Wenn ich den letzten Absatz richtig verstanden habe soll ich sämtliche Projekte in einer Datenbank speichern. Hier habe ich allerdings das Problem, dass jedes QGIS Projekt dann automatisch mit meinen gesamten Daten verbunden ist. Die Chance, dass ich oder jemand von den Kollegen eine falsche Tabelle löscht oder bearbeitet schätze ich dann als sehr groß ein. Außerdem habe ich mittels Schema die Unterteilung nach Auftraggeber und Proejekt vermischt.

Nun ja. Man kann ja auch Rechte vergeben. Wenn Du N Datenbanke für N User hast, und alle dieselben Zugangsdaten, kann das auch pasieren.

Außerdem habe ich mittels Schema die Unterteilung nach Auftraggeber und Proejekt vermischt.

Parse Error.

Jetzt wird es interessant. Schreibrechte sollen praktisch nur für aktuelle Projektdaten vergeben werden, wobei nicht zur Bearbeitung bestimmte Grundlagendaten ausgenommen sein sollen. Das muss ich mir gleich notieren. Bisher haben wir Verbindungen mit bzw. ohne Schreibrechten zu den jeweiligen Access Datenbanken aufgebaut. Mit einem Datenbankserver ist man - soweit ich das beurteilen kann - in vielen Bereichen offenbar flexibler.

Wie man mit Schemen Auftraggeber und Projekte unter einen Hut bringt erschließt sich mir aktuell noch nicht. Werde mich nächste Woche diesbezüglich nochmal einlesen. Wäre es auch schlüssig eine Datenbank pro Auftraggeber anzulegen und die dazugehörigen Projekte in Schemen zu gliedern? Auftraggeberübergreifende Abfragen kommen praktisch nicht vor und könnten im Fall der Fälle über FDW realisiert werden.

Ich kämpfe im Moment immer wieder mit über die Jahre gewachsene Datenstrukturen, die sich im Arbeitsalltag oftmals als mühsam herausstellen. Für QGIS/PostgreSQL möchte ich mir daher gleich zu Beginn ein paar Gedanken machen.

Naja, wenn es keine Auftragsgeberüberschreitende Abfragen gibt böte sich vielleicht an, je eine DB dann zu machen, und die Projekte dann in Schemas.

Ich regle das über Rechte und lege dafür Schemata an für einzelne Projekte. Für jeden ‘Kunden’ oder Großprojekt wird eine Datenbank angelegt, bei Bedarf werden Daten aus anderen Datenbanken per FDW eingebunden. Nicht zuzuordnende Daten haben ihre eigene Datenbank. Allerdings wird man nicht alles abdecken können, dafür nutzen wir je nachdem Spatialite oder ArcGIS-FileDB.
MIt QGIS musst du vorsichtig sein, wenn du 3/4D-Geometrien nutzt. Das hat hier schon Flurschaden angerichtet…

Gruß Uwe

Danke euch beiden!

@ Gisman

Kannst du noch in aller Kürze die Benutzer- bzw. Rechteverwaltung deiner Datenbanken/Schemen erklären?

MIt QGIS musst du vorsichtig sein, wenn du 3/4D-Geometrien nutzt. Das hat hier schon Flurschaden angerichtet…

Was ist denn passiert?

Ich habe vergangene Woche ein wenig an der Struktur meiner PostgreSQL/PostGIS Datenbanken gearbeitet wobei ich für jeden Projekttyp - unabhängig von den Auftraggeberatenbanken! - einen Nutzer angelegt habe.

“nutzer_projekte_typ_a” für alle Schemen “projekt_typ_a” (Besitzer mit Schreibrechten)
“nutzer_porjekte_typ_b” für alle Schemen “projekt_typ_b” (Besitzer mit Schreibrechten)
usw.

Über die Gruppe “nur_lesen”, welche alle meine Nutzer beinhaltet und jeder Datenbank zugeordnet ist, kann ich mit Leserechten auf alle Daten zugreifen.

Ist meine Nutzerverwaltung sinnvoll? Oder gibt es eine logischere Vorgehensweise? Man kann natrülich mit dem Nutzer “nutzer_projekte_typ_a” Daten abgeschlossener Typ A Projekte (Schemen) verändern oder die Verbindung zu einer falschen Datenbank (Auftraggeber) herstellen, aber alles wird man vermutlich nicht abedecken können wie Gisman bereits angemerkt hat.

Schöne Grüße!

Hallo!

Wir haben hier nicht so viele Nutzer also ist es recht einfach. Es eine Gruppe ‘USER’, die darf im großen und Ganzen in den Projektdatenbanken alles außer Datenbanken und Rollen anlegen oder Rechte vergeben. Dann gibt es einige Nutzer für Systemdatenbanken und -dienste. die nur in den entsprechenden Datenbanken aktiv sind. Dazu gibt es noch Nutzer für WMS (Nur lesen auf ausgewählte Inhalte) und WFS (Schreiben/Lesen auf ausgewählte Inhalte). Das ERP ist da ganz ausgegliedert und läuft auf einem anderen Server ohne DB-Zugriff der Nutzer.
Und über allem thront der Admin :slight_smile:
Was QGIS angerichtet hat? Naja, es hat halt die 3. und 4. Dimension beim Bearbeiten zerstört. NIcht ignoriert, sondern einfach beim Bearbeiten flächendeckend kaputtgemacht. Da ich viel mit 3D-Daten und linearer Referenzierung arbeite ist das mehr als störend. Wenn man das nicht braucht ist es aber egal.

Gruß Uwe

Danke, die Nutzeranzahl gering zu halten erscheint mir mittlerweile als sinnvoll. Ist es möglich den Schemen für abgeschlossene Projekte einen Besitzer ohne Schreibrechte zuzuordnen (über pgAdmin)? Dann könnte man via QGIS (versehentlich) keinen Schaden mehr anrichten.

Mit 3D Daten habe wir bisher nicht gearbeitet, aber ich werde die Info im Hinterkopf behalten.

Nachtrag:

In QGIS sind alle Datenbankverbindungen global. Eine neue Datenbankverbindung ist also in sämtlichen QGIS Projekten vorhanden. Somit bietet sich m.E. nur ein aktiver Benutzer für die Bearbeitung in QGIS an. Für abgeschlossene Projekte/Schemen (inklusive aller Objekte) müssen diesem Benutzer die Schreibrechte entzogen werden. Wie dies unkompliziert funktioniert weiß ich allerdings derzeit noch nicht.

Das kannst du mit Grant auf der Konsole tun oder du benutzt den Grant-Assistent von PGAdmin.
QGIS hat im übrigen vieles getan für die Version 2.8, es ist jetzt nicht mehr möglich, die Daten zu bearbeiten die zerschossen werden würden. Auch Raster aus der DB funktionieren jetzt einwandfrei.

Gruß Uwe

Hallo Gisman,

wenn man über QGIS neue Geometrien (Tabellen) anlegt oder räumliche Abfragen (Views) erzeugt ist jener Nutzer, welcher im PostGIS Verbindugnsdialog angegeben wurde, auch der Besitzer dieser Objekte. Um eine Verbindung zu einem Schema/Projekt schreibgeschützt zu schalten muss ich daher erst (in pgAdmin) den Besitzer aller Objekte ändern und dann mittels Grant Wizard Selecht-Rechte für den Nutzer der QGIS Verbindung vergeben.

Ah, jetzt versteh ichs auch :wink:
Ich lege allgemeine Daten immer als ein Datenbanknutzer/Geo-Admin an und vergebe die Rechte daran entsprechend für die Nutzer. Als sonstige Dektop-Nutzer kann das jeder in dem für ihn zugänglichen Bereich tun und kann/muß das dann auch selbst managen.
Hat eben den Vorteil, das ich da nicht soviel herumadministrieren muß und der Wildwuchs etwas eingedämmt ist.