Kopieren einer postgres-Datenbank von einem server zum anderen
Ich habe eine postgres-Datenbank mit einer Reihe von Schemata und eine Reihe von Tabellen innerhalb des schemas, und die Tabellen haben eine Reihe von Fremdschlüssel-Beziehungen miteinander. Alles was ich will zu tun ist, kopieren Sie alles von einem server auf einen anderen, im wesentlichen erstellen Sie eine Kopie des ersten Servers. An diesem Punkt, ich don ' T Pflege wenn ich habe zu klopfen entweder oder beide Server komplett aus der Kommission während ich dies Tue.
Ich kann nicht herausfinden, ein Weg, um kopieren Sie einfach alles in der ersten Datenbank direkt in die zweite Datenbank. Ich habe versucht pg_dump und pg_restore aber die Wiederherstellung verletzt ein Bündel von außen-Zwänge, und daher nicht richtig wiederhergestellt. Ich habe gelesen, dass Sie nur Daten wiederherstellen, die beseitigt werden alle Daten, deaktivieren Sie die Einschränkungen, während die Daten geladen werden, und dann aktivieren Sie die Einschränkungen, wenn die Daten geladen wurden, aber dies setzt Voraus, die Quell-und die Ziel-Datenbank mit der gleichen Tabellenstruktur, was Sie nicht können. Wenn es einen Weg-dump, nur das schema und die Daten, ich könnte mir vorstellen, dass das funktionieren würde, aber ich habe nicht gefunden, einen Weg, um zu tun, dass entweder.
- Sie wollen wahrscheinlich verwenden Sie einen binären dump. Wenn das immer noch nicht für Sie arbeiten (sollte), können Sie kopieren die Daten-Dateien mit "hot-standby" - Modus. Finden Sie in den Abschnitten 24.2 und 25 des PostgreSQL Administrator ' s Guide.
- haben Sie versucht, die Einstellung Einschränkungen zu zurückstellbaren Modus zu vermeiden, die fremden Einschränkungen Verletzung?
- Das ist nicht ein "binärer dump", btw, ist das nur eine Kopie der gesamten PostgreSQL-Installation. (Ich würde erwarten, dass ein "Binär-dump" zu sein, etwas, das noch getan werden, mit
pg_dump
schreiben Binär statt text-Datei, die Daten fürCOPY
. Es dauerte eine Weile, um herauszufinden, was du gemeint). Sie müssen auch nicht die Verwendung von hot-standby, das ist ganz getrennt. Sie möchtenpg_basebackup -X stream
oder wenn Sie bekommen Lust, WAL-Archivierung und -pg_start_backup()
,rsync
,pg_stop_backup()
. - Insbesondere fehlt aus dieser Frage sind Fehlermeldungen, die genauen Befehle, die Sie lief, die PostgreSQL-version(s) in Verwendung, etc.
- Sorry, ich hätte klarer - es gibt zwei Dinge, die ich Vorschlage. Die eine ist die binäre pg_dump mit "custom" - format (Option-c), die andere ist die Datei basierte Kopie. Im letzteren Fall, durch die Art und Weise, die Sie nicht kopieren Sie die gesamte installation, nur eine Teilmenge der Daten-Dateien. Das Zitat gab ich details.
- Wenn Sie nicht kopieren Sie die gesamte Installation mit einem basebackup Ansatz dann bekommst du eine unbrauchbare DB. Können Sie ausschließen
pg_xlog
nur, wenn Sie haben WAL-achiving aktiviert. Das ist es. Man kann sicherlich nicht nur das kopieren einer Datenbank, zum Beispiel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wollen, um eine Datenbank
mydb
aufserver
und kopieren Sie es aufmydb
aufserver2
, vollständig ersetzen alle Inhalte vonmydb
aufserver2
, dump mit so etwas wie:dann wieder mit:
Wird dies:
DROP
Datenbankmydb
aufserver2
, vollständig und dauerhaft zerstört alle Daten inmydb
aufserver2
CREATE
Datenbankmydb
aufserver2
aus einer völlig leeren Vorlagemydb
aufserver
inserver2
Andere Möglichkeit ist die Verwendung
pg_restore --clean
ohne drop und create. Das wird drop alle Tabellen dann neu erstellen. Ich bevorzuge die Tropfen die ganze DB und eine saubere stattdessen.Können Sie eine "custom" - format Sicherung, und klicken Sie dann auf eine leere Datenbank auf dem neuen Platz, machen Sie eine Wiederherstellung. Das hat bei mir geklappt in der Vergangenheit. Aber wenn Sie eine nur-text-backup, wirst du die Fehler, die Sie haben.