Wie importiere ich vorhandene * .sql-Dateien in PostgreSQL 8.4?

105

Ich verwende PostgreSQL 8.4 und habe einige * .sql-Dateien zum Importieren in eine Datenbank. Wie kann ich das machen?

Badr
quelle

Antworten:

142

Über die Befehlszeile:

psql -f 1.sql
psql -f 2.sql

Von der psqlEingabeaufforderung:

\i 1.sql
\i 2.sql

Beachten Sie, dass Sie die Dateien möglicherweise in einer bestimmten Reihenfolge importieren müssen (z. B. Datendefinition vor der Datenmanipulation). Wenn Sie eine bashShell (GNU / Linux, Mac OS X, Cygwin) haben und die Dateien möglicherweise in alphabetischer Reihenfolge importiert werden , können Sie diesen Befehl verwenden:

for f in *.sql ; do psql -f $f ; done

Hier ist die Dokumentation der psqlAnwendung (danke, Frank): http://www.postgresql.org/docs/current/static/app-psql.html

Bolo
quelle
@moon Vielleicht haben Sie keine Zugriffsrechte auf die SQL-Dateien? Auf welchem ​​Betriebssystem bist du?
Bolo
@moon Dies ist das Kennwort, das Ihrem PostgreSQL-Benutzer zugeordnet ist (das Benutzer-Pass-Paar ist in PostgreSQL gespeichert).
Bolo
8
@moon Ich schlage vor, dass Sie Ihr Problem in drei Phasen aufteilen: 1) Stellen Sie sicher, dass Sie loslegen können psql. 2) sicherstellen , dass Ihre Benutzer über die notwendigen Schreibrechte, wie zum Beispiel: CREATE, INSERT, UPDATE, etc. 3) importieren die SQL - Dateien. Soweit ich weiß, befinden Sie sich jetzt in Phase 1.
Bolo
@ Bolo: Würden Sie die drei Stufen in die Antwort setzen?
AH
@ Bolo, wie du erwähnt hast bin ich jetzt in dritten Schritten. Aber wie kann ich eine SQL-Datei von meinem lokalen Computer importieren? Ich habe versucht, \ i [vollständiger Pfad mit Erweiterung], aber ich erhalte die Fehlermeldung .sql keine solche Datei oder Verzeichnis. Könnten Sie bitte ein Beispiel geben.
75

Erreichen Sie in der Befehlszeile zuerst das Verzeichnis, in dem psql vorhanden ist, und schreiben Sie dann folgende Befehle:

psql [database name] [username]

und drücken Sie die Eingabetaste. psql fragt nach dem Passwort. Geben Sie das Benutzerpasswort ein:

dann schreibe

> \i [full path and file name with extension]

Drücken Sie dann die Eingabetaste.

Badr
quelle
Ich benutze das auch. Und es funktioniert. Ich ändere jedoch die bereitgestellten SQL-Anweisungen. Bisher hat die vorhandene * .sql kein Zeichen verwendet. als Beendigung einer Leitung. Und ich muss auch den GO entfernen. Denken Sie nicht, dass das SQL-Skript kein Psql-Skript ist?
Swdev
Ich habe versucht, \ i [vollständiger Pfad mit Erweiterung] zu verwenden, aber ich erhalte die Fehlermeldung .sql keine solche Datei oder Verzeichnis. Könnten Sie bitte ein Beispiel hochladen. Vielen Dank.
Wenn \ i keine solche Datei sagt, wurde an dieser Position keine Datei gefunden. Geben Sie am besten die absolute URL an. Unter Windows funktionierte diese Befehlszeile: \ i /tmp/robert/test.sql Natürlich müssen Sie gültige SQL-Befehle in dieser Datei haben.
Shevy
35

Der kürzeste Weg, den ich kenne, ist folgender:

psql -U {user_name} -d {database_name} -f {file_path} -h {host_name}

Datenbankname: In welche Datenbank sollten Sie Ihre Dateidaten einfügen?

Dateipfad: Absoluter Pfad zu der Datei, über die Sie den Import durchführen möchten.

Hostname: Der Name des Hosts. Für Entwicklungszwecke ist es meistens localhost.

Wenn Sie diesen Befehl in die Konsole eingeben, werden Sie aufgefordert, Ihr Kennwort einzugeben.

Arslan Ali
quelle
25

Seien Sie vorsichtig mit "/" und "\". Auch unter Windows sollte der Befehl folgende Form haben:

\i c:/1.sql
Sofiane
quelle
1

Immer bevorzugt mit einer Verbindungsdienstdatei (Lookup / Google 'psql Verbindungsdienstdatei')

Dann einfach:

psql service={yourservicename} < {myfile.sql}

Wo yourservicenameist ein Abschnittsname aus der Servicedatei?

Ted Rybicki
quelle