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?

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


@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.


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.


25

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

\i c:/1.sql

1

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

Dann einfach:

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

Wo yourservicenameist ein Abschnittsname aus der Servicedatei?

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.