Start mit pgAdmin

Wenn es umfangreicher wird google mal nach SEP3. Das ist ein Datenbankschema, dass von den GDs und Fugro entwickelt wurde. Dies ist zwar auf Access, kann aber man kann das auch auf Postgres umsetzen. Wir nutzen das seit Jahren mit einigen eigenen Anpassungen (ca. 30 große, zusammenhängende Projekte, >10000 Aufschlüsse + Seismik und Peilungen, Plattformen sind Web, ArcGIS und QGIS) , aber es enthält eigentlich alles was man für Bohrungen etc braucht. Man nutzt in der Regel nicht alles, aber man ist dann offen für neue Anforderungen. Schaus dir mal an, du kannst da sicher auch was lernen was Datenmodellierung angeht.

Hi Gisman,

das ist im Übrigen genau das was wir auch vorhaben…

Wir arbeiten im Moment noch mit dem SEP1 als Accsess-Datenbank. Ich möchte das aber gern im GeODin in das SEP3 überführen.

Kannst du mir bitte mal einen kurzen ABriss darüber geben, wie ihr das verwirklicht habt und wie ihr die Daten aus dem GeoDin oder SEP3 in diese Datenbank bekommt!?

Unsere Intention ist es, unsere Aufschlüsse und Bohrdaten in eine Datenbank zu implementieren und in QGIS zu visualisieren… (ARCGIS ist mir definitiv zu “fett” geworden =D)

Ich habe die SEP-Datenbank, die es im Inet gibt genommen und in Postgres umgesetzt. Die Frontends dazu habe ich nach Bedarf gebaut. Wir bekamen immer Access-Datenbanken von unseren Projektpartnern, die habe ich dann mit einem selbstgebauten Accessfrontend nach Postgres per ODBC-Verbindung überführt. Dort wurde auch mit GeoDin gearbeitet, frag mich aber nicht mir welcher Version. Das ganze System hat über 10 Jahre lang so gut fuktioniert, wie ein gewachsenes Ding aus dem letzten Jahrtausend halt funktionieren kann (begonnen hat das alles noch unter DOS :wink:).
Im Moment arbeite ich daran eine Geometrieverwaltung zu bauen, ein Webclient zur Datenerfassung und verschiedene Webservices kommt auch noch. Ich möchte gerne vermeiden die Schlüsselzuweisung im SEP3-Datenmodell zu verändern, deshalb muss ich eine eigene Tabelle für die Geometrien mit einem SERIAL als PK einführen, weil QGIS mit Mehrfelderschlüsseln nicht so recht klarkommt und ich die Option massstabsabhängig verschiedene Geometrien bereitstellen zu können, erhalten will. Da dann jedoch in beiden Tabellen gearbeitet werden wird synchronisiere ich die mit einem Trigger. Eine Anbindung zu ArcGIS benötigen wir auch, da werde ich mal sehen müssen wie ich da mit den OGR-Tools klarkomme oder ob ich ein Postgres 9.3 betreiben muss, das mir die notwendigen Daten per FDW bereitstellt und das ich als Datenquelle in ArcGIS verwenden kann.

hey,

also ich habe es jetzt auch geschafft unsere GeODin-Datenbank zu importieren. Leider fehlen da die richtigen Beziehungen.

Deshalb möchte ich nun nochmal auf das vorherige Problem zurückkommen.

Akretschmer, ich habe es in psql probiert und das Problem gefunden. Leider finde ich keine richtige Lösung.

Als Fehler wird mir folgendes angezeigt:

FEHLER:  ungültige Eingabesyntax für ganze Zahl: „215001“
CONTEXT:  COPY projekte, Zeile 1, Spalte projektnummer: „215001“
********** Fehler **********

FEHLER: ungültige Eingabesyntax für ganze Zahl: „215001“
SQL Status:22P02
Kontext:COPY projekte, Zeile 1, Spalte projektnummer: „215001“

was hier, genauso wenig wie beim import über den pgadmin, NICHT angezeigt wird ist ein geschlossenes Viereck vor der Zahl. Dies wird mir nur im Meldungsfenster von psql angezeigt. KLar das diese ZAhl dann nicht mit dem int funktioniert.

Nun aber meine Frage: was ist das und wie bekomm ich es weg aus meiner liste (.txt) in der ich es nicht mal sehe? diese txt kommst aus einer excel-file in der ich die zahlen aber als zahlen definiert habe…

ich hoffe echt, ihr könnt mir helfen.

danke schon mal im voraus

Ah, Excel :slight_smile:
Vermutlich hast du irgendwelche Whitespaces in der Datei. Die musst du entfernen bevor du mit den Inhalten richtig arbeiten kannst. Entweder du bearbeitest die Datei mit einem Editor oder du liest sie erst in eine Import-Tabelle as Strings ein, von der du dann per SQL die Daten aufbereitest und in die richtige Tabelle schreibst. Und du mußt auf Umlaute und Encoding acht geben.

Gruß Uwe

naja, ich weis nicht ob notpad++ als editor zählt in dem zusammenhang, aber da werden mir keine sachen vor den zahlen angezeigt. dort specihere ich es als .txt. danach lade ich es im windows-editor und speichere es als utf-8 kodierte .txt nochmals ab.

trotzdem scheint sich da irgendwas vorher zu verstecken. aber ich wüsste nicht wie ich das dann da raus bekomme.

dies hier ist die psql fehlerausgabe:

FEHLER:  ungültige Eingabesyntax für ganze Zahl: "215001"
KONTEXT:  COPY projekte, Zeile 1, Spalte projektnummer: "215001"

sagt euch diese zeichenkombination etwas?

ok ich hab diesen fehler nun beheben können mit notpad++… einfach in utf8 ohne BOM konvertieren… diese zeichen sind dieses BOM.
nun hab ich aber mal wieder andere fehler… irgendwas mit byte-folge 0x81… ka… langsam hasse ich meine ausgangstabelle xD

Du konntest mit iconv oder ähnlichen Tools arbeiten.

Ja, encoding ist eine Geschichte mit vielen Mißverständnissen. Hast du Zugang zu Ultraedit? Damit sollte eine Konvertierung unter Windows möglich sein. Unter Linux nutze ich auch iconv.

so ich hab dieses einfache kapitel unter psql nun endlich geschafft xD

gibt es noch andere brauchbare editoren bzw tools unter windows, was das encoding etwas vereinfacht?

@ GISMAN: jetzt mal etwas spezieller:

meine DAtenbankstruktur soll relativ einfach werden. D.h. ich habe meine Muttertabelle mit den Projektnummern und-namen (Projektnummer ist PK).
Nun möchte ich eine weitere Tabelle erstellen für ein einziges Projekt (Bsp.: 215519). in dieser Tabelle möchte ich die namen der Bohrungen in einer spalte haben und die dazugehörige Geometrie (POINT als POSTGIS tabelle). Eventuell auch noch die Ansatzhöhen. Diese Tabelle sollte in meienn Vorstellungen über einen Fremdschlüssel mit der Proejkttabelle verknüpft sein. Das heißt das diese Bohrungstabelle genau einem Projekt der Muttertabelle zugeordnet ist… Muss ich dafür eine Spalte mit der Projektnummer einfügen und als ausgangspunkt für den foreignkey definieren oder hab ich das faslch verstanden?

Nur der Vollständigkeit halber: Danach möchte ich eine Tabelle erstellen in der die einzelnen Schichten mit ihren Merkmalen der jeweiligen Bohrung aus der Bohrungstabelle zugeordnet werden. das heißt in der Bohrungsnamentabelle wird der Bohrungsname PK und in der Schichten Tabelle wird soll ein FK zur Bohrungstabelle verknüpft werden…

So ich hoffe du weist was ich meine ^^ falls die struktur scheise ist, sag das bitte ^^

Dein “Nun möchte ich eine weitere Tabelle erstellen für ein einziges Projekt (Bsp.: 215519).” klingt für mich nach kaputtem Design.

kannst du dies bitte näher erläutern akretschmer? denn diese aussage alleine bringt mich nicht weiter.

Wenn Du ein neues Projekt bekommst (einen neuen Kunden, ein neues Produkt, einen neuen Artikel im Shop, einen neuen Mitarbeiter in der Firma, whatever) und Du legst deswegen eine neue Tabelle an, dann ist das ein klarer Verstoß gegen ein gescheites Tabellendesign. Du bist dann nicht mehr in der Lage, z.B. eine Abfrage über alle Projekte (Kunden, Produkte, Artikel, Mitarbeiter, …) durchzuführen, weil Du alle SQL-Abfragen dazu anpassen müßtest (um den Namen der neuen Tabelle). Das skaliert nicht, das ist Müll.

Vielen Dank.

Das heißt im Prinzip müsste ich eine Tabelle schaffen, welche durchgehend alle Projektnummern beinhaltet?

so dass ich dann eine Tabelle habe in der in der ersten spalte die Projektnummer steht und in der zweiten die dazugehörigen Bohrungen mit den entsprechenden Koordinaten?

Als Beispiel: ich habe 10 Bohrungen namens RKS1-10 mit entsprechenden Koordinaten. DIese gehort zu Prokjekt 215219.

Dann würde meine Tabell wie folgt aussehen: In spalte 1 (Projektnummer) steht 10 x 215219 untereinander. daneben jeweils eine Bohrung RKS1, RKS2 untereinander usw.!?

Bekomme ich ein neues Projekt dazu, schreibe ich dass dann einfach darunter? wie läuft das dann wenn ich mal ein anderes koordinatensystem habe als das GK4?

irgendwie sehr schwierig diese räumliche komponente…

Hallo!
Du hast eine Tabelle, die diene Projekte verwaltet mit dem PK Projektnummer. Dann hast du eine Stammdatentabelle, die die Bohrungen enthält. Diese hat ale FK die Projektnummer und als PK eine eigene ID oder eine andere eindeutige ID. Ich habe hier einen zusammengesetzten Key aus Projekt-ID und einer dazu eindeutigen Bohrungs-ID. Als drittes kommt die Schichtdatentabelle, wie du beschrieben hast, mit den PK der Stammdatentabelle als FK.

Zum Koordinatensystem: Ich würde Koordinaten und SRID im Original als Felder in der Stammdatentabelle mitführen. Für die Geometrie suchst du die eine einheitliche aus, die am besten zu deinem Projekt passt. So hast du jeweils die Originalkoordinaten und eine einheitliche Geometrie für die Darstellung. Hier bei mir ist die Geometrie aus mehreren Gründen UTM32N, EPSG:25832. Europaweit findet im übrigen gerade sukkzessive eine Umstellung von den nationalen Netzen zu UTM statt, insofern ist das zumindest für längere Projektlaufzeiten eine ganz gute Wahl. Die Erstellung der Geometrie kannst du per Trigger ausführen, so das du da nicht händisch herummachen musst.

Grüßle Uwe

ok danke erstmal. also habe ich im endeffekt nur 3 tabellen insgesamt!? gut das sollte funktionieren.

und die geschichte mit den koordinaten machst du im endeffekt so, dass du erstmal zwei (oder eine?) spalte die original koordinaten mitnimmst mit dem entsprechenden srdi und dann noch eine spalte mit der am ende umgerechneten geometrieanweisung für postgis!?

Ja, genau. Normalerweise xcoord, ycoord, zcoord oder AP-Höhe und geom für eine Geometrie. Ob du da eine 2D, 3D oder 4D Geometrie benutzt musst du überlegen, je nach dem was du in deinem Projekt brauchst.

ok, super… .dann ahb ich ja was, womit ich mich heute mal ausgiebig beschäftigen kann.
bin mal gespannt ob ich irgendwo ein copy befehl mit geom-funktion für postgis finde… bisher steht immer nur INSERT bla… aber da brauch ich 10 jahre ^^

Mach das mit einem Insert-Trigger oder mach dir ein Shapefile o.ä. und dumpe das in die Datenbank. QGIS kann sowas eigentlich recht gut.