Eine Postgres-Sicherungsdatei über die Befehlszeile wiederherstellen?

294

Ich bin neu in postgresql und verwende lokal pgadmin3. Auf dem Remote-Server habe ich jedoch keinen solchen Luxus.

Ich habe die Sicherung der Datenbank bereits erstellt und kopiert. Gibt es jedoch eine Möglichkeit, eine Sicherung über die Befehlszeile wiederherzustellen? Ich sehe nur Dinge, die mit der GUI oder pg_dumps zu tun haben. Wenn mir also jemand sagen kann, wie ich das anstellen soll, wäre das großartig!

TwixxyKit
quelle

Antworten:

365

Es gibt zwei Tools, die Sie sich ansehen können, je nachdem, wie Sie die Dump-Datei erstellt haben.

Ihre erste Referenzquelle sollte die Manpage sein, pg_dump(1)da dadurch der Speicherauszug selbst erstellt wird. Es sagt:

Dumps können in Skript- oder Archivdateiformaten ausgegeben werden. Skript-Dumps sind Nur-Text-Dateien, die die SQL-Befehle enthalten, die erforderlich sind, um die Datenbank in den Zustand zu versetzen, in dem sie sich zum Zeitpunkt des Speicherns befand. Um ein solches Skript wiederherzustellen, geben Sie es an psql (1) weiter. Skriptdateien können verwendet werden, um die Datenbank auch auf anderen Computern und anderen Architekturen zu rekonstruieren. mit einigen Änderungen sogar bei anderen SQL-Datenbankprodukten.

Die alternativen Archivdateiformate müssen mit pg_restore (1) verwendet werden, um die Datenbank neu zu erstellen. Sie ermöglichen es pg_restore, selektiv zu entscheiden, was wiederhergestellt werden soll, oder sogar die Elemente vor der Wiederherstellung neu zu ordnen. Die Archivdateiformate sind so konzipiert, dass sie über Architekturen hinweg portierbar sind.

Kommt also darauf an, wie es rausgeworfen wurde. Sie können es wahrscheinlich mit dem ausgezeichneten file(1)Befehl herausfinden. Wenn ASCII-Text und / oder SQL erwähnt werden, sollte es mit wiederhergestellt werden, psqlandernfalls sollten Sie es wahrscheinlich verwendenpg_restore

Das Wiederherstellen ist ziemlich einfach:

psql -U username -d dbname < filename.sql

-- For Postgres versions 9.0 or earlier
psql -U username -d dbname -1 -f filename.sql

oder

pg_restore -U username -d dbname -1 filename.dump

Schauen Sie sich die jeweiligen Manpages an - es gibt einige Optionen, die sich auf die Funktionsweise der Wiederherstellung auswirken. Je nachdem, wie die Dumps generiert wurden, müssen Sie möglicherweise Ihre "Live" -Datenbanken bereinigen oder aus template0 neu erstellen (wie in einem Kommentar angegeben), bevor Sie sie wiederherstellen.

Steven Schlansker
quelle
3
IME möchten Sie praktisch immer in einer Datenbank wiederherstellen, die aus template0 neu erstellt wurde. Wenn Sie beispielsweise plpgsql in template1 aktiviert haben, versucht der Wiederherstellungsprozess es erneut. Der von Ihnen vorgeschlagene Schalter -1 bedeutet, dass die gesamte Transaktion fehlschlägt. Also so etwas wie "createdb -T template0 seo2" gefolgt von "pg_restore -v -d seo2 seo.pg", um seo.pg (erstellt aus der SEO-Datenbank) in einer neuen SEO2-Datenbank wiederherzustellen. Wenn Ihre Sicherungsdatei nur eine SQL-Datei ist, können Sie widersprüchliche Teile von Hand herausschneiden.
Araqnid
61
Sie können nicht -dund -fgleichzeitig haben. pg_restore: options -d/--dbname and -f/--file cannot be used together
CppLearner
8
In Version 9.2 gibt die Option "-f" eine Ausgabedatei an, nicht die Speicherauszugsdatei (und dies bedeutet wahrscheinlich dasselbe in früheren Versionen).
David Resnick
4
In Bezug auf zu cannot be used togethersehen, hier: stackoverflow.com/questions/27882070/...
Abdull
3
@ Alex78191 bedeutet, dass es als einzelne Transaktion ausgeführt wird, die vollständig fehlschlagen und ein Rollback durchführen oder durchlaufen kann. Dadurch wird auch der Zugriff auf die Datenbank blockiert.
ATN
216

ein Backup erstellen

pg_dump -h localhost -p 5432 -U postgres -F c -b -v -f 
"/usr/local/backup/10.70.0.61.backup" old_db

-F c ist ein benutzerdefiniertes Format (komprimiert und kann parallel zu -j N ausgeführt werden) -b enthält Blobs, -v ist ausführlich, -f ist der Name der Sicherungsdatei

von der Sicherung wiederherstellen

pg_restore -h localhost -p 5432 -U postgres -d old_db -v 
"/usr/local/backup/10.70.0.61.backup"

wichtig, um die Option -h localhost - zu setzen

Pilot
quelle
2
Ich möchte erwähnen, dass Sie sich vor dem Ausführen dieser Befehle im Ordner Posgresql bin befinden sollten . Zum Beispiel in Windows (wenn Sie es im Standardordner installiert haben) wäre es C: \ Programme \ PostgreSQL \ 9.6 \ bin
juan_carlos_yl
90

Möglicherweise müssen Sie wie angemeldet sein, postgresum über die vollständigen Berechtigungen für Datenbanken zu verfügen.

su - postgres
psql -l                      # will list all databases on Postgres cluster

pg_dump / pg_restore

  pg_dump -U username -f backup.dump database_name -Fc 

Schalter -FFormat der Sicherungsdatei angeben:

  • c verwendet das benutzerdefinierte PostgreSQL-Format, das komprimiert ist und die kleinste Größe der Sicherungsdatei ergibt
  • d für Verzeichnis, in dem jede Datei eine Tabelle ist
  • t für TAR-Archiv (größer als benutzerdefiniertes Format)
  • -h/ --hostGibt den Hostnamen des Computers an, auf dem der Server ausgeführt wird
  • -W/ --passwordErzwingen Sie pg_dumpdie Eingabe eines Kennworts, bevor Sie eine Verbindung zu einer Datenbank herstellen

Backup wiederherstellen:

   pg_restore -d database_name -U username -C backup.dump

Der Parameter -Csollte vor dem Importieren von Daten eine Datenbank erstellen. Wenn es nicht funktioniert, können Sie jederzeit eine Datenbank erstellen, z. mit Befehl (als Benutzer postgresoder anderes Konto, das Rechte zum Erstellen von Datenbanken hat)createdb db_name -O owner

pg_dump / psql

Falls Sie das Argument nicht angegeben haben, wurde das -FStandard-SQL-Format (oder mit -F p) verwendet. Dann kannst du nicht benutzen pg_restore. Sie können Daten mit importieren psql.

Backup:

pg_dump -U username -f backup.sql database_name

wiederherstellen:

psql -d database_name -f backup.sql
Tombart
quelle
Ich habe den Befehl "psql -d Datenbankname -f backup.sql" verwendet, um eine Datenbank wiederherzustellen, die ich von dokku auf DigitalOcean ausgegeben habe. Hat super funktioniert.
NineBlindEyes
1
Wenn Ihr Benutzer (z. B. postgres) ein Kennwort festgelegt hat, -Wsollte bei Verwendung von psql die Option verwendet werden. Zum Beispiel unter Ubuntu, ohne su postgresirgendwo vom Terminal aus zu arbeiten, $ psql -h localhost -U postgres -W -d DB_NAME < DB_BACKUP.sqlist der Befehl, der für mich funktioniert hat, um mein Backup auf meinem lokalen Host wiederherzustellen. Beachten Sie, dass die -hOption benötigt wird.
Jignesh Gohel
@JiggneshhGohel Wie im Handbuch steht: -WOption ist nie wesentlich. pg_dumpfordert automatisch zur Eingabe eines Kennworts auf, wenn der Server eine Kennwortauthentifizierung anfordert. Sie können auch die PGPASSWORDVariable env verwenden, wenn Sie Klartextkennwörter verwenden. -hwird benötigt, wenn die Standardeinstellung PGHOSTnicht anwendbar ist. Diese Optionen sind für viele PostgreSQL-Dienstprogramme üblich und daher für die Beantwortung dieser Frage nicht unbedingt erforderlich (dies hängt stark von Ihrem Setup ab).
Tombart
@Tombart Ihr 2. Optionsteil pg_dump/psqlist Arbeit für mich. aber 1. Teil pg_dump/pg_restoreist nicht Arbeit für mich für die Wiederherstellung. Danke dir.
Anjan Biswas
@AnjanBiswas Die erste Option ist die Verwendung eines komprimierten Archivs, das mehr CPUs benötigt, die Sicherungsdatei jedoch weniger Speicherplatz auf der Festplatte belegt. Sie müssen nur die geeignete Komprimierung auswählen, z. B.-Fc
Tombart,
60

POSTGRESQL 9.1.12

DUMP:

pg_dump -U user db_name > archive_name.sql

Geben Sie das Benutzerpasswort ein und drücken Sie die Eingabetaste.

WIEDERHERSTELLEN:

psql -U user db_name < /directory/archive.sql

Geben Sie das Benutzerpasswort ein und drücken Sie die Eingabetaste.

Natan Medeiros
quelle
31

Unten ist meine Version, mit pg_dumpder ich die Datenbank wiederherstelle:

pg_restore -h localhost -p 5432 -U postgres -d my_new_database my_old_database.backup

oder verwenden psql:

psql -h localhost -U postgres -p 5432 my_new_database < my_old_database.backup

wo -hHost, -pPort, -uLogin-Benutzername, -dName der Datenbank

Yahor M.
quelle
2
Govind Singh, warum hast du meine Antwort bearbeitet? Ihre Änderungen bringen nichts Neues ..
Yahor M
1
my_new_databasesollte schon bei der Verwendung vorhanden sein psql, nicht?
Elmex80s
22

Sichern und Wiederherstellen mit GZIP

Für größere Datenbanken ist dies sehr gut

Backup

pg_dump -U user -d mydb | gzip > mydb.pgsql.gz

wiederherstellen

gunzip -c mydb.pgsql.gz | psql dbname -U user

https://www.postgresql.org/docs/9.1/static/backup-dump.html

Sarath Ak
quelle
1
Für Ubuntu können Sie Folgendes verwenden: gunzip -c mydb.pgsql.gz | sudo -u postgres psqlUm die Berechtigungen für den Betrieb der Datenbank zu erhalten. Beachten Sie auch das --cleanFlag beim Dumping, das alle vorhandenen Daten löscht. Dies kann nützlich sein.
Sebastian
Eine großartige und ordentliche Lösung für mich. Danke dir!
Nam G VU
11
Backup:  $ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql}

Restore: $ psql -U {user-name} -d {desintation_db} -f {dumpfilename.sql}
Aaron Lelevier
quelle
8

Das hat bei mir funktioniert:

pg_restore --verbose --clean --no-acl --no-owner --host=localhost --dbname=db_name --username=username latest.dump
Franz
quelle
Danke, das --no-ownerhat mir wirklich geholfen.
Bonafernando
7

1. Öffnen Sie das Terminal.

2.Sichern Sie Ihre Datenbank mit dem folgenden Befehl

Ihr Postgres bin - /opt/PostgreSQL/9.1/bin/

Ihr Quellendatenbankserver - 192.168.1.111

Speicherort und Name Ihrer Sicherungsdatei - /home/dinesh/db/mydb.backup

Ihr Quell-Datenbankname - mydatabase

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

3.Stellen Sie die Datei mydb.backup im Ziel wieder her.

Ihr Zielserver - localhost

Ihr Zieldatenbankname - mydatabase

Erstellen Sie eine Datenbank zum Wiederherstellen der Sicherung.

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

Stellen Sie das Backup wieder her.

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

Dinesh-SriLanka
quelle
4

Wenn Sie ein Backup mit pg_dump erstellen, können Sie es auf folgende Weise einfach wiederherstellen:

  1. Befehlszeilenfenster öffnen
  2. Gehen Sie zum Ordner Postgres bin. Beispielsweise: cd "C:\ProgramFiles\PostgreSQL\9.5\bin"
  3. Geben Sie den Befehl zum Wiederherstellen Ihrer Datenbank ein. For example: psql.exe -U postgres -d YourDatabase -f D:\Backup\.sql
  4. Geben Sie das Passwort für Ihren Postgres-Benutzer ein
  5. Überprüfen Sie den Wiederherstellungsprozess

quelle
4

1) Öffnen Sie das psql-Terminal.

2) Entpacken / entpacken Sie die Dump-Datei.

3) Erstellen Sie eine leere Datenbank.

4) Verwenden Sie den folgenden Befehl, um die Dump-Datei wiederherzustellen

<database_name>-# \i <path_to_.dump_file>
Vaibhav Desai
quelle
4

Versuche dies:

psql -U <username> -d <dbname> -f <filename>.sql

Stellen Sie DB psql aus der SQL-Datei wieder her

Faysal Maqsood
quelle
psql -U <Benutzername> -d <Datenbankname> -f <Dateiname> .sql
Faysal Maqsood
3

Versuchen:

pg_restore -h localhost -p 5432 -U <username> -d <dbname> -1 <filename>
Cristhian Gonzalez
quelle
2

Das Wiederherstellen einer Postgres-Sicherungsdatei hängt davon ab, wie Sie die Sicherung überhaupt erstellt haben.

Wenn Sie pg_dump mit -F c oder -F d verwendet haben, müssen Sie pg_restore verwenden, andernfalls können Sie einfach verwenden

psql -h localhost -p 5432 -U postgres <Sicherungsdatei

9 Möglichkeiten zum Sichern und Wiederherstellen von Postgres-Datenbanken

Prashant Kumar
quelle
Ist Ihnen klar, dass Sie den Teil mit dem Datenbanknamen verpasst haben und sich darüber beschweren, dass die Zieldatenbank nicht vorhanden ist?
Pere
2

Versuchen Sie herauszufinden, ob die folgenden Befehle Ihnen helfen können:

sudo su - yourdbuser
psql
\i yourbackupfile
Mehmet Ali
quelle
2

Entschuldigung für den Nekropost, aber diese Lösungen haben bei mir nicht funktioniert. Ich bin auf Postgres 10. Unter Linux:

  1. Ich musste das Verzeichnis in meine pg_hba.conf ändern.
  2. Ich musste die Datei bearbeiten, um die Methode wie hier angegeben von Peer auf MD5 zu ändern
  3. Starten Sie den Dienst neu: service postgresql-10 restart
  4. Wechseln Sie in das Verzeichnis, in dem sich meine backup.sql befand, und führen Sie Folgendes aus:
    psql postgres -d database_name -1 -f backup.sql

    -database_name ist der Name meiner Datenbank

    -backup.sql ist der Name meiner .sql-Sicherungsdatei.

Tim
quelle
1

Ich hatte Authentifizierungsprobleme beim Ausführen von pg_dump, daher habe ich meine Dump-Datei verschoben

mv database_dump /tmp

in das temporäre Verzeichnis und lief dann

su -u postgres
cd /tmp
pg_restore database_dump

Wenn Sie einen großen Datenbankspeicherauszug haben, möchten Sie möglicherweise nur ein anderes Verzeichnis erstellen, in das Ihr aktueller Benutzer und der Benutzer postgres zugreifen und die Datenbankspeicherauszugsdatei darin ablegen können.

user1876508
quelle
1

Wenn Sie eine SQL-Sicherungsdatei haben, können Sie diese problemlos wiederherstellen. Folgen Sie einfach den Anweisungen unten

1. At first, create a database using pgAdmin or whatever you want (for example my_db is our created db name)
2. Now Open command line window
3. Go to Postgres bin folder. For example:  cd "C:\ProgramFiles\PostgreSQL\pg10\bin"
4. Enter the following command to restore your database: psql.exe -U postgres -d my_db -f D:\Backup\backup_file_name.sql 

Geben Sie bei Bedarf ein Passwort für Ihren Postgres-Benutzer ein und lassen Sie Postgres seine Arbeit erledigen. Anschließend können Sie den Wiederherstellungsprozess überprüfen.

Omar
quelle
0

Wenn Sie Ihre Daten sichern oder Daten aus einer Sicherung wiederherstellen möchten, können Sie die folgenden Befehle ausführen:

  1. Um eine Sicherung Ihrer Daten zu erstellen, gehen Sie in Ihr Verzeichnis postgres \ bin \ like C:\programfiles\postgres\10\bin\und geben Sie den folgenden Befehl ein:

    pg_dump -FC -U ngb -d ngb -p 5432 >C:\BACK_UP\ngb.090718_after_readUpload.backup
  2. Um Daten aus einer Sicherung wiederherzustellen, gehen Sie in Ihr Verzeichnis postgres \ bin \ like C:\programfiles\postgres\10\bin\und geben Sie den folgenden Befehl ein:

    C:\programFiles\postgres\10\bin> pg_restore -Fc -U ngb -d ngb -p 5432 <C:\ngb.130918.backup

    Bitte stellen Sie sicher, dass die Sicherungsdatei vorhanden ist.

Girjesh Kumar Suryawanshi
quelle
-3

Siehe unten Beispiel seiner Funktionsweise

C: / Programme / PostgreSQL / 9.4 / bin \ pg_restore.exe --host localhost --port 5432 --Benutzername "postgres" --dbname "newDatabase" --no-password --verbose

" C: \ Benutzer \ Yogesh \ Downloads \ neuer Download \ DB.backup "

user3881346
quelle