Konzeptionell erstaunt es mich, dass es keinen SQL-Befehl zum "Restaurieren" einer Datenbank aus einer externen Quelle gibt. Und ebenso erstaunlich finde ich es, dass der Prozess "Restaurieren" genannt wird, wo es eigentlich ja um einen Import geht. Semantisch verstehe ich unter Restaurieren jedenfalls das Wiederherstellen eines zuvor existierende Zustands.
"Restaurieren" ist in diesem Fall die falsche Übersetzung von "restore".
Die korrekte Übersetzung ist in diesem Zusammenhang ist: "wiederherstellen".
Und das ("Wiederherstellen") ist auch genau das, was gemacht wird.
Der Inhalt eines Datenbank-Dumps ("logisches Backup") stellt den vollständigen Zustand der Datenbank dar, von dem Moment als der Dump erstellt wurde (präziser: von dem Moment wo der Dump-Prozess
gestartet wurde).
Das Zurückspielen eines Dumps stellt exakt den Zustand der Datenbank wieder her, wie er beim Erstellen des Dumps war. Daher ist "restore" - Wiederherstellen - auch die korrekte Bezeichnung.
Von einem "Import" spricht man eher wenn man externe Daten in eine Datenbank einspielt. Z.B. eine CSV/Text Datei die von einem anderen System übertragen wurde. Letztendlich hängt das aber auch ein wenig vom Datenbanksystem am. Bei Oracle heißen die Tools für das logische Backup ("Snapshots") DataPump Export und DataPump Import - aber auch das sind Kommandozeilen Tools.
Die wenigsten Datenbanken bieten SQL Befehle zum zurückspielen eines Dumps an (eigentlich kenne ich das nur vom Microsofts SQL Server). Meistens liegt es an der Architektur des Systems. In Oracle kann man z.B. gar keinen SQL Befehl ausführen, wenn man keine "Datenbank" angelegt hat - wie also sollte man dann eine "Datenbank" zurückspielen. Aber der Begriff "Datenbank" bedeutet in Oracle auch etwas vollständig anderes als z.B. in Postgres oder SQL Server.
Grundsätzlich kann man durchaus mit Postgres ein System aufsetzen bei dem Benutzer einen "Dump" via SQL anstoßen oder einspielen können (habe ich erst kürzlich bei einem Kunden gemacht).
Die Postgres Entwickler halten das aber offensichtlich für nicht wichtig, da der Fokus dort auf Backuplösungen liegt welche für einen zentralen (z.B. unternehmensweiten) Datenbankserver wichtig sind. Und das sind nun mal Lösungen die sich automatisieren lassen (das ist bei Oracle, DB2 oder SQL Server nicht wesentlich anders). Außerdem laufen alle (Linux) Server ja ohne eine graphische Oberfläche, weswegen Tools um die Datenbank zu verwalten erst mal als Kommandozeilen-Befehl zur Verfügung stehen
müssen.
Das Schöne an einer OpenSource Lösung ist aber: wenn sich genug Leute finden, die eine Steuerung via wichtig fänden, dann findet sich vermutlich auch jemand der es implementiert.
Vor 10 Jahren hat auch keiner geglaubt, dass Postgres mal eine eingebaute Replikation haben würde
Es gibt noch einen Grund warum es
kein SQL Befehl ist (zumindest bei Postgres): ein (logisches) Backup wird typischerweise nicht auf dem Datenbankserver erstellt oder gespeichert (es dient ja als Datensicherung und wen der DB-Server nicht mehr funktioniert, hätte man auch keinen Zugriff auf das Backup). Da dann aber ein Programm auf einem anderen Rechner verwendet werden muss, kann es kein (reiner) SQL Befehl sein, da ein Befehl der über SQL auf dem Server ausgeführt wird, ja nur auf dem Server Daten lesen und schreiben kann. Das ist es sinnvoller ein Client-Programm zu haben welches das erledigt, da dieses Programm dann auch auf dem "Backuprechner" die Daten direkt schreiben kann.
Um Deine Verwirrung bzgl "restore" oder "import" zu komplettieren: viele Begriffe in der IT-Welt haben in unterschiedlichen Umgebungen unterschiedliche Bedeutungen. Wie oben schon erwähnt ist "Datenbank" so ein Begriff. Wenn ein Oracle DBA von einer "Datenbank" redet meint er etwas vollständig anderes als ein Postgres oder SQL Server DBA. Ähnlich ist es mit den Begriffen "backup", "restore" oder "import". Die wenigsten DBAs (Postgres DBAs eingeschlossen) würden einen "Dump" als richtiges Backup bezeichnet. Ein Backup (zumindest im Kontext eines Datenbankservers) ist ein ständiger Prozess der alle gemachten Änderungen (Transaktionen) kontinuierlicher sichert in dem Moment wo sie passieren.
Postgres (wie auch Oracle, SQL Server, DB2 und andere Datenbank
server) ist für den Betrieb als zentraler Dienst ausgelegt, nicht als "Desktop-Datenbank" für einen einzelnen Benutzer wie z.B. Microsoft Access. Die Konzepte sind komplett unterschiedlich und das wirkt sich auf die Tools und die Prozesse wie bestimmte Dinge zu gemacht werden, aus.
Sind euch erfahrene Datenbanker bekannt, die beim Entwurf einer neuen Datenbank zunächst ausschließlich mit Diagrammen modellieren - bis die Normalisierung abgeschlossen ist?
Ich
Bei einfachen Modelle (3-4 Tabellen) lässt man das Diagramm schon mal weg, aber meistens bereut man es ein Jahr später wenn aus den 4 Tabellen auf einmal 40 geworden sind.
Eine der besten Methoden ein DB Modell zu dokumentieren ist und bleibt ein ER Model (und nein ein "UML" Modell ist kein vernünftiger Ersatz).
Ich betreue viele Entwicklungsprojekte beim Datenbankfragen und versuche immer die ständige Pflege des ER Modells durchzusetzen. Häufig gelingt mir das nicht, und dann kommen die Entwickler nach einem halben Jahr und fragen ob man nicht so ein schönes Diagramm erstellen könnte um die Datenbank dokumentieren. Das Problem ist, dass eine "schönes" Diagramm manuelle Pflege braucht - und das geht am schnellsten wenn man es kontinuierlich pflegt. Automatisch erstellte Diagramme sind meistens sehr schwer zu lesen - ich habe jedenfalls noch keine wirklich brauchbares automatische Layout gesehen.
Was ich damit sagen will: Dein bestreben ein ER Modell zu erstellen ist sehr sinnvoll und jeder professionelle DB Entwickler (bzw. Modellierer) wird Dir dabei Recht geben.