748 Stimmen

Führen Sie eine PostgreSQL .sql-Datei unter Verwendung von Befehlszeilenargumenten aus

Ich habe einige .sql-Dateien mit Tausenden von INSERT-Anweisungen darin und muss diese Inserts auf meiner PostgreSQL-Datenbank ausführen, um sie einer Tabelle hinzuzufügen. Die Dateien sind so groß, dass es unmöglich ist, sie zu öffnen und die INSERT-Anweisungen in ein Editorfenster zu kopieren und sie dort auszuführen. Im Internet habe ich gefunden, dass Sie das Folgende verwenden können, indem Sie zum bin-Ordner Ihrer PostgreSQL-Installation navigieren:

psql -d meineDatenbank -a -f meineInsertDatei

In meinem Fall:

psql -d HIGHWAYS -a -f CLUSTER_1000M.sql

Ich werde dann nach einem Passwort für meinen Benutzer gefragt, kann jedoch nichts eingeben, und wenn ich die Eingabetaste drücke, erhalte ich diesen Fehler:

psql: FATAL: Authentifizierung für Benutzer "meinBenutzername" fehlgeschlagen

Warum lässt es mich kein Passwort eingeben? Gibt es einen Weg, dies zu umgehen, da es wichtig ist, dass ich diese Skripte ausführen kann?

Ich habe dieses Problem umgangen, indem ich einen neuen Eintrag in meiner pg_hba.conf-Datei mit folgender Struktur hinzugefügt habe:

# IPv6 lokale Verbindungen:
host    meineDbName    meinBenutzername ::1/128    trust

Die pg_hba.conf-Datei befindet sich normalerweise im Ordner 'data' Ihrer PostgreSQL-Installation.

9 Stimmen

Du hast bereits deine Antwort bekommen, aber nur für den Fall... "Ich kann nichts eingeben", meinst du vielleicht, dass beim Eingeben deines Passworts nichts angezeigt wird? Das ist normalerweise in diesem Fall der Fall, normalerweise sollte das Eingeben des Passworts und das Drücken von Enter funktionieren...

0 Stimmen

Ich hatte ein ähnliches Problem bei der Installation einer Kopie von ITIS (itis.gov). Die Datenbank existierte nicht, sodass ich ihren Namen nicht verwenden konnte. Aufgrund der Arbeitsweise von PostgreSQL konnte ich folgendes tun: psql --port=5554 --username=root --file=ITIS.sql template1

0 Stimmen

55voto

vishu9219 Punkte 745
export PGPASSWORD=
psql -h  -d  -U  -p  -a -w -f .sql

1 Stimmen

Wie kann ich das machen, ohne eine Ausgabe

2 Stimmen

Psql -h -d -U -p -a -q -w -f .sql

3 Stimmen

@Lu32 Sie könnten auch die Flagge -a weglassen (die bedeutet "Alle nicht leeren Eingabezeilen so drucken, wie sie gelesen werden"). EDIT getestet, ohne -a druckt es weniger aus, aber immer noch zu viele Informationen. Also ist die -q Flagge korrekt, wie vishu9219 sagte.

30voto

Satish Sharma Punkte 3226

Melden Sie sich über das Terminal bei Ihrer Datenbank an und versuchen Sie dies:

database-# >@pathof_mysqlfile.sql

oder

database-#>-i pathof_mysqlfile.sql

oder

database-#>-c pathof_mysqlfile.sql

0 Stimmen

Diese Lösung ist für mich solider; nicht die markierte als Antwort

0 Stimmen

Gibt es einen Unterschied zwischen @, -i und -c ?

27voto

Deepu Sahni Punkte 379

Sie können sowohl Benutzername als auch PASSWORT direkt über die Befehlszeile mit dem Parameter "-d" angeben

   psql -d "dbname='urDbName' user='yourUserName' password='yourPasswd' host='yourHost'" -f yourFileName.sql

0 Stimmen

Das funktioniert, wenn Sie keine Umgebungsvariablen setzen oder seltsame Passdateien verwenden möchten. =)

2 Stimmen

Dies hätte die akzeptierte Antwort sein sollen, danke

16voto

MDK Punkte 510

Sie könnten es sogar auf diese Weise tun:

sudo -u postgres psql -d myDataBase -a -f myInsertFile

Wenn Sie sudo-Zugriff auf die Maschine haben und es nicht für Produktions-Skripte empfohlen wird, sondern nur zum Testen auf Ihrer eigenen Maschine, ist dies der einfachste Weg.

15voto

wingman__7 Punkte 629

2021 Lösung

wenn Ihre PostgreSQL-Datenbank lokal auf Ihrem System ist.

psql dbname < sqldump.sql username

Wenn es online gehostet wird

psql -h hostname dbname < sqldump.sql username

Wenn Sie Zweifel oder Fragen haben, stellen Sie diese bitte in den Kommentaren.

0 Stimmen

Ist es vom Betriebssystem abhängig?

1 Stimmen

@BingLi224 Ich benutze ein Windows-System und bin mir ziemlich sicher, dass es nicht vom Betriebssystem abhängig ist.

1 Stimmen

Beste Antwort. Anwendbar auf Ubuntu/Debian Systeme. Wenn Sie es von einem Benutzer mit Berechtigung zum Ändern der Datenbank ausführen, können Sie sogar den Benutzernamen Teil weglassen, sodass es nur psql dbname < sqldump.sql ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X