2013-10-07 7 views
6

Ich verwende die Postgres heute und bekam ein Problem ich Dump die Datenbank, die Art und WeiseWie Postgres-Datenbank in einer anderen Datenbank Namen

pg_dump zeus_development -U test > zeus_development.dump.out 

was wiederherstellen kann, wenn ich wnat in einer anderen Datenbank zeus_production

wiederherstellen Wie könnte ich tun?

+1

Randnotiz - es könnte besser sein, eines der binären Dump-Format anstelle von Nur-Text zu verwenden. Es beschleunigt den Dump/Restore-Prozess, reduziert die Größe der Dump-Datei und bietet einige zusätzliche Möglichkeiten, den Wiederherstellungsprozess zu steuern. Details ['here'] (http://www.postgresql.org/docs/current/static/app-pgdump.html) –

Antwort

14

Einfach, erstellen Sie zunächst Ihre Datenbank template0 als template database mit:

createdb -U test -T template0 zeus_production 

Dann stellen Sie Ihre Dump dieser Datenbank:

psql -U test zeus_production -f /path/to/zeus_development.dump.out 

Bei der Wiederherstellung, immer template0 explizit verwenden, wie es ist immer eine leere und unveränderbare Datenbank. Wenn Sie keine explizite Vorlage verwenden, wird PostgreSQL template1 annehmen, und wenn es einige Objekte, wie eine Tabelle oder Funktion, die Ihre Dump-Datenbank bereits hat, erhalten Sie einige Fehler beim Wiederherstellen.

Nichtsdestotrotz, auch wenn Sie in einer Datenbank mit dem gleichen Namen (zeus_development) wiederherstellen, sollten Sie es auf die gleiche Weise erstellen (oder neu erstellen). Es sei denn, Sie verwendeten -C Option beim Dumping (oder -Cpg_restore bei Verwendung eines binären Dump), die ich nicht empfehlen, weil Sie weniger Flexibilität geben (wie die Wiederherstellung auf einem anderen Datenbanknamen).

0

Ist es nicht einfacher, einfach folgendes zu tun?

createdb -U test -T zeus_development zeus_production 
+0

Tatsächlich funktioniert das obige. Die ursprüngliche Frage erwähnte nicht, dass er auf eine neue Maschine umzog. Es wurde einfach angenommen. Die Option -T ist ziemlich stark. – pedz

2

Die PostgresSQL Dokumentation hat mich das benutzerdefinierte Format zu verwenden, beeinflusst. Ich benutze es seit Jahren und es scheint verschiedene Vorteile zu haben, aber YMMV. Das heißt, hier ist das, was für mich gearbeitet:

pg_restore --no-owner --dbname postgres --create ~/Desktop/pg_dump 
psql --dbname postgres -c 'ALTER DATABASE foodog_production RENAME TO foodog_development' 

Es gab keine foodog_development noch foodog_production Datenbanken, die vor der Sequenz.

Dadurch wird die Datenbank aus dem Dump (~/Desktop/pg_dump) wiederhergestellt, die sie mit dem Namen erstellt, unter dem sie abgelegt wurde. Das Umbenennen benennt die DB zu was auch immer Sie wollen.

Der --no-Eigentümer wird möglicherweise nicht benötigt, wenn Ihr Benutzername auf beiden Computern identisch ist. In meinem Fall wurde der Speicherauszug als Benutzer1 und die Wiederherstellung als Benutzer2 ausgeführt. Die neuen Objekte müssen Eigentum von user2 sein und --no-owner erreicht dies.

Verwandte Themen