Importieren Sie den SQL-Dump in die PostgreSQL-Datenbank

450

Wir wechseln den Host und der alte hat einen SQL-Dump der PostgreSQL-Datenbank unserer Site bereitgestellt.

Jetzt versuche ich, dies auf einem lokalen WAMP-Server einzurichten, um dies zu testen.

Das einzige Problem ist, dass ich keine Ahnung habe, wie diese Datenbank in das von mir eingerichtete PostgreSQL 9 importiert werden soll.

Ich habe pgAdmin III ausprobiert, aber ich kann anscheinend keine Importfunktion finden. Also habe ich gerade den SQL-Editor geöffnet und den Inhalt des Dumps dort eingefügt und ausgeführt. Er erstellt die Tabellen, gibt mir aber immer wieder Fehler, wenn er versucht, die Daten darin abzulegen.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

Ich habe auch versucht, dies mit der Eingabeaufforderung zu tun, aber ich kann den benötigten Befehl nicht finden.

Wenn ich mache

psql mydatabase < C:/database/db-backup.sql;

Ich bekomme den Fehler

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

Wie kann die Datenbank am besten importiert werden?

blenden
quelle
Ich hatte einen ähnlichen Fehler wie bei Ihrem ersten : ERROR: syntax error at or near "t". Es stellte sich heraus, dass ich nur ein Teilschema importiert hatte und daher eine CREATE TABLEAnweisung früher im Skript fehlgeschlagen war. Sehen Sie sich die vollständige Ausgabe des Imports an, um sie zu finden.
Owensmartin

Antworten:

731
psql databasename < data_base_dump

Das ist der Befehl, den Sie suchen.

Achtung: databasenamemuss vor dem Import erstellt werden. Schauen Sie sich die PostgreSQL-Dokumente in Kapitel 23 an. Sichern und Wiederherstellen .

Jacob
quelle
1
Ich habe versucht, dass psql mydatabase <C: \ database \ db-backup.sql, aber ich erhalte den Fehler Ungültiger Befehl \ database. Ich habe es auch mit "" versucht.
Blenden
23
@Dazz Sie müssen diesen Befehl an Ihrer Eingabeaufforderung (Start -> Ausführen -> cmd) ausführen, nicht an der Eingabeaufforderung von postgres.
Jacob
2
Wenn ich es von cmd aus starte, erhalte ich 'Der Operator' <'ist für die zukünftige Verwendung reserviert.'
Blenden
3
@ Jazz: Sie könnten auch -fSchalter (oder --file) verwenden
Grzegorz Szpetkowski
47
psql --username = postgres Datenbankname <data_base_dump.sql
Maxence
356

Hier ist der Befehl, den Sie suchen.

psql -h hostname -d databasename -U username -f file.sql
Gabriel Ramirez
quelle
29
Gut, aber besser auch den Parameter "-L logfile.log" anhängen, um die Ausgabe in der Datei zu protokollieren.
zerologiko
2
Abrufen dieser "Die Eingabe ist ein benutzerdefinierter PostgreSQL-Speicherauszug. Verwenden Sie den Befehlszeilenclient pg_restore, um diesen Speicherauszug in einer Datenbank wiederherzustellen."
Wajdan Ali
3
Sie können auch:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo
114

Ich glaube, dass Sie in psql laufen wollen:

\i C:/database/db-backup.sql
Arran Ubels
quelle
Musste dies verwenden, da Emacs 'Eshell die Umleitung von Eingaben nicht unterstützt. Vielen Dank.
Duma
3
Stellen
53

Das hat bei mir funktioniert:

sudo -u postgres psql db_name < 'file_path'
ivanacorovic
quelle
49

Ich bin nicht sicher, ob dies für die Situation des OP funktioniert, aber ich fand, dass das Ausführen des folgenden Befehls in der interaktiven Konsole die flexibelste Lösung für mich war:

\i 'path/to/file.sql'

Stellen Sie einfach sicher, dass Sie bereits mit der richtigen Datenbank verbunden sind. Dieser Befehl führt alle SQL-Befehle in der angegebenen Datei aus.

Rockusbacchus
quelle
1
Diese Lösung hat bei mir funktioniert, während die am häufigsten gewählte Lösung den Fehler "stdin ist kein tty" ergab.
25.
Genau das, wonach ich gesucht habe - eine Möglichkeit, das Skript über die psqlBefehlszeile auszuführen . Vielen Dank!
Vatsug
Ich wollte mich nur für diesen einen bedanken. Sollte in der richtigen Antwort enthalten sein.
PKHunter
Dies ist richtig, verwenden Sie keine Schrägstriche im Pfad in Windows!
Erdinc Ay
Auch für Windows benötigen Sie doppelte Schrägstriche
CMAS
44

Funktioniert ziemlich gut, in der Kommandozeile sind alle Argumente erforderlich, -W steht für Passwort

psql -h localhost -U user -W -d database_name -f path/to/file.sql
Feuda
quelle
22

Nur zum Spaß, wenn Ihr Dump komprimiert ist, können Sie so etwas tun

gunzip -c filename.gz | psql dbname

Wie Jacob erwähnte, beschreiben die PostgreSQL-Dokumente dies alles recht gut.

Alan
quelle
7

Ich benutze:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

Hoffe das wird jemandem helfen.

Vajira Lasantha
quelle
4

Sie können es in pgadmin3 tun. Löschen Sie die Schemas, die Ihr Dump enthält. Klicken Sie dann mit der rechten Maustaste auf die Datenbank und wählen Sie Wiederherstellen. Dann können Sie nach der Dump-Datei suchen.

Vanessa MacDougal
quelle
2
Die Schaltfläche "Wiederherstellen" kann jedoch auch nach Auswahl der SQL-Datei nicht angeklickt werden. Diese Software scheint eine andere Art von Datei zu wollen - eine mit dem * .backup-Format. Das Klicken auf 'Hilfe' in diesem Importfeld bezieht sich auf pg_restore - "... ein Dienstprogramm zum Wiederherstellen einer PostgreSQL-Datenbank aus einem Archiv, das von pg_dump in einem der Nicht-Klartextformate erstellt wurde." Die SQL-Datei, auf die sich das OP bezieht, ist ein Nur-Text-Format.
JosephK
3

Mir ist aufgefallen, dass viele Beispiele für localhost überkompliziert sind, bei denen in vielen Fällen nur Postgres-Benutzer ohne Passwort existieren:

psql -d db_name -f dump.sql
Kiryl Plyashkevich
quelle
3

Stellen Sie sicher, dass die Datenbank, in die Sie importieren möchten, erstellt wurde. Anschließend können Sie den Speicherauszug mit importieren

sudo -u postgres -i psql testdatabase < db-structure.sql

Wenn Sie die gesamte Datenbank überschreiben möchten, löschen Sie zuerst die Datenbank

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

und dann neu erstellen mit

sudo -u postgres -i psql -c "create database testdatabase;"
rubo77
quelle
2

Ich habe viele verschiedene Lösungen zum Wiederherstellen meines Postgres-Backups ausprobiert. Unter MacOS stieß ich auf Probleme, denen die Erlaubnis verweigert wurde. Es schienen keine Lösungen zu funktionieren.

So habe ich es zum Laufen gebracht:

Postgres wird mit Pgadmin4 geliefert. Wenn Sie macOS verwenden, können Sie CMD+ drücken SPACEund eingeben pgadmin4, um es auszuführen. Dadurch wird eine Browser-Registerkarte in Chrome geöffnet.

Wenn Sie auf Fehler stoßen, damit pgadmin4 funktioniert, versuchen Sie es killall pgAdmin4in Ihrem Terminal und versuchen Sie es erneut.


Schritte zum Abrufen / Wiederherstellen von pgadmin4 +

1. Erstellen Sie das Backup

Klicken Sie dazu mit der rechten Maustaste auf die Datenbank -> "Backup"

Geben Sie hier die Bildbeschreibung ein

2. Geben Sie der Datei einen Namen.

Wie test12345. Klicken Sie auf Sichern. Dadurch wird ein Binärdateidump erstellt, der nicht in einem .sqlFormat vorliegt

Geben Sie hier die Bildbeschreibung ein

3. Sehen Sie, wo es heruntergeladen wurde

Unten rechts auf Ihrem Bildschirm sollte sich ein Popup befinden. Klicken Sie auf die Seite "Weitere Details", um zu sehen, wohin Ihr Backup heruntergeladen wurde

Geben Sie hier die Bildbeschreibung ein

4. Suchen Sie den Speicherort der heruntergeladenen Datei

In diesem Fall ist es /users/vincenttang

Geben Sie hier die Bildbeschreibung ein

5. Stellen Sie die Sicherung von pgadmin wieder her

Angenommen, Sie haben die Schritte 1 bis 4 korrekt ausgeführt, haben Sie eine Wiederherstellungs-Binärdatei. Es kann vorkommen, dass Ihr Mitarbeiter Ihre Wiederherstellungsdatei auf seinem lokalen Computer verwenden möchte. Habe gesagt, Person gehe zu pgadmin und stelle wieder her

Klicken Sie dazu mit der rechten Maustaste auf die Datenbank -> "Wiederherstellen"

Geben Sie hier die Bildbeschreibung ein

6. Wählen Sie den Dateisucher

Stellen Sie sicher, dass Sie den Speicherort der Datei manuell auswählen. Ziehen Sie eine Datei NICHT per Drag & Drop auf die Uploader-Felder in pgadmin. Weil Sie auf Fehlerberechtigungen stoßen. Suchen Sie stattdessen die gerade erstellte Datei:

Geben Sie hier die Bildbeschreibung ein

7. Suchen Sie die Datei

Möglicherweise müssen Sie den Filter unten rechts auf "Alle Dateien" ändern. Suchen Sie die Datei anschließend ab Schritt 4. Klicken Sie zur Bestätigung auf die untere rechte Schaltfläche "Auswählen"

Geben Sie hier die Bildbeschreibung ein

8. Stellen Sie die Datei wieder her

Diese Seite wird erneut mit dem Speicherort der ausgewählten Datei angezeigt. Fahren Sie fort und stellen Sie es wieder her

Geben Sie hier die Bildbeschreibung ein

9. Erfolg

Wenn alles in Ordnung ist, sollte unten rechts ein Indikator für eine erfolgreiche Wiederherstellung angezeigt werden. Sie können zu Ihren Tabellen navigieren, um festzustellen, ob die Daten für jede Tabelle ordnungsgemäß wiederhergestellt wurden.

10. Wenn es nicht erfolgreich war:

Sollte Schritt 9 fehlschlagen, löschen Sie Ihr altes öffentliches Schema in Ihrer Datenbank. Gehen Sie zu "Abfrage-Tool"

Geben Sie hier die Bildbeschreibung ein

Führen Sie diesen Codeblock aus:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

Geben Sie hier die Bildbeschreibung ein

Versuchen Sie nun die Schritte 5 bis 9 erneut, es sollte funktionieren

Zusammenfassung

Auf diese Weise musste ich meine Sicherung auf Postgres sichern / wiederherstellen, wenn ich Probleme mit der Fehlerberechtigung hatte und mich nicht als Superuser anmelden konnte. Oder legen Sie Anmeldeinformationen für Lesen / Schreiben mit chmodOrdnern fest. Dieser Workflow funktioniert für einen Binärdateidump-Standardwert von "Benutzerdefiniert" von pgadmin. Ich gehe davon aus, dass .sqles genauso ist, aber ich habe das noch nicht getestet

Vincent Tang
quelle