Hallo,
wie kann ich die Datenbankstruktur einer Datenbank mit SQL ermitteln?
ich weiß das es mit pg_dump möglich ist. Aber ich würde gern wissen ob es die möglichkeit auch mit einem oder mehreren SQL-Befehlen gibt.
Hallo,
wie kann ich die Datenbankstruktur einer Datenbank mit SQL ermitteln?
ich weiß das es mit pg_dump möglich ist. Aber ich würde gern wissen ob es die möglichkeit auch mit einem oder mehreren SQL-Befehlen gibt.
Was genau willst Du wissen?
ich weiß das es mit pg_dump möglich ist. Aber ich würde gern wissen ob es die möglichkeit auch mit einem oder mehreren SQL-Befehlen gibt.
Sicher. In psql kannst Du Dir alles mögliche anschauen, mit \dX. Die Onlinehilfe kann Dir helfen. Letztendlich sind das nur Abfragen auf Katalogtabellen. Wie diese Abfragen exakt aussehen, sagt Dir psql, wenn Du es mit -E startest.
Oder suchst Du einfach nur das hier:
kretschmer@KanotixBox:~$ apt-cache show postgresql-autodoc
...
Description: utility to create system tables overview in HTML, DOT and XML
This is a utility which will run through PostgreSQL system tables and returns
HTML, DOT, and 2 styles of XML which describes the database.
.
The HTML is human readable (via webbrowser). The first style of XML is actually
the fileformat of Dia, a UML diagram tool. The second type of XML is similar to
the HTML but in the Docbook 4 format. It enables you to mix in other docbook
documentation via the XREFs, generating PDFs, HTML, RTF, or other formatted
documents. Between these tools and JavaDoc with the appropriate XREFs,
documentation about a project can be generated quickly and be easily updatable
yet have a very professional look with some DSSSL work.
Tag: devel::docsystem, devel::lang:sql, implemented-in: :p erl, interface::commandline, role: :p rogram, scope::utility, works-with::db, works-with::text, works-with-format::docbook, works-with-format::html
kretschmer@KanotixBox:~$
Andreas
Danke erstmal für deine hilfe
Genau das möchte ich! Ich Möchte wissen welche DB angelegt wurde und was alles in der DB angelegt wurde, also Tabellen, Indexe, Trigger, etc. Und da wollte ich wissen ob es ne Möglichkeit gibt das via SQL herauszufinden. Ich weiß zum Beispiel das es bei MySQl mit
SHOW CREATE DATABASE [i]db-name[/i]
geht. Aber diese Abfrage hab ich nicht in postgresql gefunden.
Wie heißen die Tabellen? Oder wo kann ich finden wie diese Tabellen heißen?
Die Antwort auf diese Frage wird Dich vermutlich jetzt arg überraschen: in der Doku. Da biste platt, gell?
PostgreSQL: Documentation: Manuals: PostgreSQL 8.2: System Catalogs
Andreas
oh ha,
danke, das hilft mir jetzt schon erheblich weiter
nun noch eine Frage, gibt es ne Möglichkeit wie ich die Struktur der Datenbank bekomme, ähnlich wie mit pg_dump?
mit “pg_dump -d db_name -s > testfile” bekomme ich ja die Struktur der Datenbank in ein Textfile.
Ich möchte nun nicht pg_dump verwenden, sonder einen Befehl, zum Beispiel SQL-befehl oder C-Funktion, der mir die Struktur in Form eines Strings ausgibt.
Mein Ziel ist es das ich die Struktur in ein C-Programm in Form eines Stringsvorliegen hab, den ich dann weiter verarbeiten kann.
Im moment seh ich die Möglichkeit. pg_dump verwenden und das erzeugte Textfile im C-Programm öffnen und die Struktur auslesen.
Die andere Möglichkeit ist die Strutur aus den Katalogtabellen auslesen und zusammenbasteln, was sicher zu großer aufwand ist.
Eine Dritte Möglichkeit sehe ich noch, indem ich mir die Struktur manuell anlege bzw. definiere.
Wie gefragt gibt es eine Möglichkeit die Struktur einer Datenbank in Form von SQL-Befehlen in einem String für ein C-Programm zu ermitteln?
Du könntest pg_dump neu erfinden.
Ich möchte nun nicht pg_dump verwenden, sonder einen Befehl, zum Beispiel SQL-befehl oder C-Funktion, der mir die Struktur in Form eines Strings ausgibt.
Mein Ziel ist es das ich die Struktur in ein C-Programm in Form eines Stringsvorliegen hab, den ich dann weiter verarbeiten kann.
Du möchtest also das, was pg_dump kann, ohne pg_dump zu benutzen.
Im moment seh ich die Möglichkeit. pg_dump verwenden und das erzeugte Textfile im C-Programm öffnen und die Struktur auslesen.
Was genau spricht dagegen?
Die andere Möglichkeit ist die Strutur aus den Katalogtabellen auslesen und zusammenbasteln, was sicher zu großer aufwand ist.
vermutlich.
Eine Dritte Möglichkeit sehe ich noch, indem ich mir die Struktur manuell anlege bzw. definiere.
Wie gefragt gibt es eine Möglichkeit die Struktur einer Datenbank in Form von SQL-Befehlen in einem String für ein C-Programm zu ermitteln?
Du nanntest bereits die 2 sinnvollsten Möglichkeiten. Wenn es Dir zu blöd ist, pg_dump aufzurufen, dann programmiere es nach. Als Vorlage kannst Du ja den Quelltext nehmen. Wenn Dir das Format von pg_dump nicht gefällt, kann man das auch umformen, Texttools gibt es wie Sand am Meer(sed, awk, perl, …)
Andreas
ok… also ist pg-dump die sinnvollste Lösung.
Ich bin kein Experte in C. Daher eine Frage. Wie kann ich innerhalb eines C-Programms pg_dump Aufrufen, wenn das C-Programm auf einen Client läuft und Postgresql auf nen Server?
wo wir gerade bei dump sind. Ich habe gerade ein problem mit pg_restore.
ich will eine Datenbank wiederherstellen, wenn diese zum Beispiel versehendlich gelöscht wurde. Dabei soll nur die Datenbank und ihre Struktur angelet werden, die ich voher mit pg_dump gesichert hab.
Ich hatte folgende befehle ausgeführt.
pg_dump db_test2 -s -Ft > ablage2
Zum Versuch habe ich die test-datenbank db_test2 gelöscht.
pg_restore -d db_test2 -C -s ablage2
Hier wurde mir dann folgende fehlermeldung ausgegeben:
“pg_restore: [archiver (db)] connection to database “db_test2” failed: FATAL: database “db_test2” does not exist”
was mach ich falsch??
es soll db_test2 angelegt werden udn dann die struktur wiederhergestellt werden.
-C
–create
Erzeugt die Datenbank, bevor Daten in sie geladen werden. (Wenn diese Option verwendet wird, wird die
durch -d genannte Datenbank nur verwendet, um den Befehl CREATE DATABASE am Anfang auszufüh-
ren. Alle Daten werden in der im Archiv genannten Datenbank wiederhergestellt.)
Installier pg_dump auf dem Client und rufe das aus Deinem C-Programm dann auf. Pg_dump kann über das Netzwerk arbeiten.
Ich hatte folgende befehle ausgeführt.
pg_dump db_test2 -s -Ft > ablage2
>
> Zum Versuch habe ich die test-datenbank db_test2 gelöscht.
>
> ```text
pg_restore -d db_test2 -C -s ablage2
Hier wurde mir dann folgende fehlermeldung ausgegeben:
“pg_restore: [archiver (db)] connection to database “db_test2” failed: FATAL: database “db_test2” does not exist”was mach ich falsch??
Du versuchst, Dich zu einer nichtexistenten DB zu connecten. Verwende template0 oder template1 anstelle der wiederherzustellenden DB. Allerdings wäre es wohl besser gewesen, pg_dump auch mit -C zu machen…
(ich bin mir jetzt nicht sicher, ob bei -Ft im Dump der Name der DB enthalten ist, um beim Restore in diese DB nach Erstellung zu wechseln)
Andreas
Jo Danke
restore geht wenn ich beim pg_dump auch -C angebe
gute Idee
kann man pg_dump und pg_restore einzeln auf dem Client installieren?
Im moment hab ich nix gefunden wie das geht, außer man installiert postgresql ganz.
Ja.
Im moment hab ich nix gefunden wie das geht, außer man installiert postgresql ganz.
apt-get install postgresql-client-VERSION
Andreas
Also akretschmer hat Recht, du solltest auf keinen Fall versuchen, das Rad neu zu erfinden. Speziell, wenn es um Zugriffe auf die Systemkataloge geht. Diese ändern sich auch schon mal von Version zu Version un dpg_dump ist hier a) aktuell informiert und kommt b) auch mit älteren Datenbankversionen zurecht.
Zur reien Information könntest du allerdings auch mal einen Blick in das “information_schema” werfen.
Ach, btw, zur Aussage, das du kein Experte in C bist: gerade bei dieser Sprache solltest du schon einigermassen sicher sein, wie du damit umgehst. Ansonsten baust du dir ggf. mehr Probleme und Sicherheitslücken ein, als dir lieb sind.
danke für eure Tipps… haben mir echt weiter geholfen. Und das Rad werde ich auch nicht neu erfinden
In C komm ich ganz gut klar. Ich kenn halt noch nicht alles. Bin noch recht am anfang mit C-Programmierung. Mach das erst seit 3 Jahren im Studium.
Ist halt nen recht großes gebiet.
Ich hätte da auch mal gleich noch ne Frage. Wie kann ich die Kodierung einer Datenbank ändern?
Hab bis jetzt keinen Befehl dafür gefunden. Hab ne Testdatenbank erstellt und diese nicht auf UTF8 eingestellt und wollte das noch ändern!
Google: “postgresql change database encoding”, 2. Treffer.
Andreas
Jo danke für die Hilfe!!