it-swarm.com.de

Wie kann man PostgreSQL-Dump-Datei in Postgres-Datenbanken wiederherstellen?

Ich habe eine Speicherauszugsdatei mit der Erweiterung .SQL (tatsächlich handelt es sich um eine Nur-Text-SQL-Datei). Ich möchte es in meine erstellten Datenbanken wiederherstellen. Ich verwende pgAdmin III und wenn ich den "Wiederherstellungsassistenten" verwende, wird der Button "Wiederherstellen" nicht hervorgehoben. Stattdessen erwartet sie eine .backup-Dateierweiterung.

Ich habe versucht, die Befehle von Shell zum Wiederherstellen des Dumps zu verwenden, aber es funktionierte immer noch nicht.

Ich bin ein Neuling in diesem Bereich. Wenn mir jemand helfen könnte, wäre ich verpflichtet.

Bearbeiten

Ich habe den folgenden Befehl für den Shell SQL-Bereich von PostGres verwendet, während ich in der newTestDB saß.

newTestDB-# \i E:\db-rbl-restore-20120511_Dump-20120514.sql

Es gab immer noch den gleichen Fehler ("Permission Denied").

Nach dem Erhöhen der Berechtigungen werden mir nur die Standardtabellen von PostgreSQL angezeigt:

      List of tablespaces
Name       |  Owner   | Location
-----------+----------+----------
pg_default | postgres |
pg_global  | postgres |

(2 rows)

Ich weiß nicht, wie ich die Datenbank aus einer SQL-Datei importieren/wiederherstellen soll.

43
Usman

Sie haben nicht erwähnt, wie Ihre Sicherung erstellt wurde. Daher lautet die allgemeine Antwort: Normalerweise mit dem Tool psql. 

Abhängig davon, was pg_dump zum Dumping angewiesen wurde, kann die SQL-Datei unterschiedliche Sätze von SQL-Befehlen haben ..__ Wenn Sie beispielsweise pg_dump anweisen, eine Datenbank mit --clean und --schema-only zu sichern, können Sie nicht davon ausgehen, dass sie die Wiederherstellung durchführen können Datenbank aus diesem Dump, da keine SQL-Befehle für COPYing (oder INSERTing, wenn --inserts verwendet wird) die tatsächlichen Daten in den Tabellen enthalten. Ein solcher Speicherauszug enthält nur DDL-SQL-Befehle und kann das Schema neu erstellen, nicht jedoch die tatsächlichen Daten.

Ein typischer SQL-Dump wird mit psql wiederhergestellt:

psql (connection options here) database  < yourbackup.sql

oder alternativ aus einer psql-Sitzung,

psql (connection options here) database
database=# \i /path/to/yourbackup.sql

Bei Sicherungen, die mit pg_dump -Fc ("benutzerdefiniertes Format") erstellt wurden, bei dem es sich nicht um eine reine SQL-Datei, sondern um eine komprimierte Datei handelt, müssen Sie das Tool pg_restore verwenden.

Wenn Sie an einem Unix-ähnlichen Modell arbeiten, versuchen Sie Folgendes:

man psql
man pg_dump
man pg_restore

ansonsten schauen Sie sich bitte die Datei the html docs an. Viel Glück!

46
dschulz

Das Problem bei Ihrem Versuch in der psql-Befehlszeile ist die Richtung der Schrägstriche:

newTestDB-# /i E:\db-rbl-restore-20120511_Dump-20120514.sql   # incorrect
newTestDB-# \i E:/db-rbl-restore-20120511_Dump-20120514.sql   # correct

Um klar zu sein, psql-Befehle beginnen mit einem umgekehrten Schrägstrich, daher sollten Sie stattdessen \i eingeben. Ihr Tippfehler ist, dass psql alles ignoriert hat, bis Sie den ersten \ gefunden haben, dem zufällig db folgte, und \db der Befehl psql für die Auflistung von Tabellenbereichen ist Liste der Tablespaces . Es war keine Auflistung von "Standardtabellen von PostgreSQL", wie Sie sagten.

Außerdem scheint es, dass psql erwartet, dass das Argument filepath Verzeichnisse unabhängig vom Betriebssystem mit dem Schrägstrich einschränkt.

Es ist erwähnenswert, dass Ihr Versuch, "Berechtigungen zu erhöhen", keinen Bezug zum Ergebnis des Befehls hatte, den Sie ausführen wollten. Sie haben auch nicht gesagt, was den angeblichen Fehler "Permission Denied" verursacht hat.

Schließlich spielt die Erweiterung der Dump-Datei keine Rolle, tatsächlich benötigen Sie nicht einmal eine Erweiterung. Tatsächlich schlägt pgAdmin eine .backup-Erweiterung vor, wenn Sie einen Backup-Dateinamen auswählen, aber Sie können es tatsächlich beliebig machen, auch ohne eine Erweiterung. Das Problem ist, dass pgAdmin nur das "Wiederherstellen" von Dumps "Custom oder tar" oder "Directory" zulässt (dies ist zumindest in der MAC OS X-Version der App der Fall). Verwenden Sie also einfach den Befehl psql\i als oben gezeigt.

22
user664833

Mit dem Befehl pg_restore können Sie die Postgres-Datenbank wiederherstellen

Erster offener Terminaltyp 

Sudo su postgres

Neue Datenbank erstellen 

createdb [Datenbankname] -O [Eigentümer]

createdb test_db [-O openerp]

pg_restore -d [Datenbankname] [Pfad der Speicherauszugsdatei]

pg_restore -d test_db /home/sagar/Download/sample_dbump

Warten Sie, bis die Wiederherstellung der Datenbank abgeschlossen ist.

Denken Sie daran, dass die Speicherauszugsdatei über Lese-, Schreib- und Ausführungszugriff verfügen sollte, sodass Sie den Befehl chmod anwenden können.

15
Sagar Pise

1.Öffnen Sie das Terminal.

2. sichern Sie Ihre Datenbank mit folgendem Befehl

ihre Postgres-Bin - /opt/PostgreSQL/9.1/bin/

ihr Quelldatenbankserver - 192.168.1.111

speicherort und Name der Sicherungsdatei - /home/dinesh/db/mydb.backup

ihr Quell-Datenbankname - meine Datenbank

/opt/PostgreSQL/9.1/bin/pg_dump --Host '192.168.1.111' --port 5432 --Benutzername "postgres" --no-password --Format anpassen --blobs --file "/ home/dinesh/db /mydb.backup "" mydatabase "

3. Wiederherstellen der Datei mydb.backup im Ziel.

ihr Zielserver - localhost

der Name Ihrer Zieldatenbank - meineDatenbank

Datenbank zum Wiederherstellen der Sicherung erstellen.

/opt/PostgreSQL/9.1/bin/psql -h 'localhost' -p 5432 -U postgres -c "CREATE DATABASE-Datenbank"

Wiederherstellung der Sicherung.

/opt/PostgreSQL/9.1/bin/pg_restore --Host 'localhost' --port 5432 --username "postgres" --dbname "mydatabase" --no-password --clean "/ home/dinesh/db/mydb. Backup "

7
Dinesh-SriLanka

Zusammen mit den Ratschlägen von MartinP und user664833 konnte ich es auch zum Laufen bringen. Die Eingabe von psql aus dem pgAdmin-GUI-Tool erfolgt über die Auswahl von Plugins. Die PSQL-Konsole legt die Berechtigungsnachweise und die Berechtigungsstufe für die psql-Sitzung fest. Daher müssen Sie über Admin- oder CRUD-Berechtigungen für die Tabelle und möglicherweise auch über Admin für die Datenbank verfügen (nicht sicher wissen, dass) Der Befehl in der psql-Konsole würde dann folgende Form annehmen:

postgres=# \i driveletter:/folder_path/backupfilename.backup

dabei ist postgres = # die Eingabeaufforderung von psql und nicht Teil des Befehls.

Die .backup-Datei enthält die Befehle, die zum Erstellen der Tabelle verwendet werden. In der Datei werden möglicherweise auch Befehle wie "ALTER TABLE ..." -Befehle angezeigt, die ausgeführt, aber als Fehler gemeldet werden. Ich nehme an, Sie können diese Befehle immer löschen, bevor Sie die Zurückschreibung ausführen, aber Sie sind wahrscheinlich sicherer, als wenn Sie sie dort aufbewahren, da diese die Wiederherstellung der Daten wahrscheinlich nicht zum Scheitern bringen werden. Stellen Sie jedoch immer sicher, dass die Daten, die Sie wiederherstellen wollten, tatsächlich dort angekommen sind. (Tut mir leid, wenn dies für jemanden als gönnerhafte Beratung empfunden wird, aber es ist ein Versehen, das jedem passieren kann, egal wie lange er bei diesem Zeug gewesen ist - ein Moment der Ablenkung von einem Kollegen, ein Telefonanruf usw.) und es ist leicht, dies zu tun Vergessen Sie diesen Schritt. Ich habe es schon früher in meiner Karriere mit anderen Datenbanken gemacht und fragte mich: "Warum werden mir aus dieser Abfrage keine Daten wiedergegeben?" Die Antwort war, dass die Daten nie wirklich wiederhergestellt wurden und ich nur zwei Stunden damit verschwendete um mögliche Fehler zu finden, die nicht existierten.)

5
Matt Campbell

Ich finde, dass psql.exe mit der Schrägstrichrichtung ziemlich wählerisch ist, zumindest unter Windows (was oben aussieht).

Hier ist ein Beispiel. In einem cmd Fenster:

C:\Program Files\PostgreSQL\9.2\bin>psql.exe -U postgres
psql (9.2.4)
Type "help" for help.

postgres=# \i c:\temp\try1.sql    
c:: Permission denied
postgres=# \i c:/temp/try1.sql
CREATE TABLE
postgres=#

Sie können sehen, dass es fehlschlägt, wenn ich in einem \i-Aufruf "normale" Windows-Schrägstriche verwende . Allerdings funktionieren beide -Slash-Stile, wenn Sie sie als Eingabeparams an psql.exe übergeben.

C:\Program Files\PostgreSQL\9.2\bin>psql.exe -U postgres -f c:\TEMP\try1.sql
CREATE TABLE

C:\Program Files\PostgreSQL\9.2\bin>psql.exe -U postgres -f c:/TEMP/try1.sql
CREATE TABLE

C:\Program Files\PostgreSQL\9.2\bin>
0
MartinP

Möglicherweise müssen Sie Berechtigungen auf Datenbankebene festlegen, damit der Schemabesitzer den Speicherauszug wiederherstellen kann.

0
Bill Rosmus