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

13voto

Amazigh Coder Punkte 71
psql -h localhost -d userstoreis -U admin -p 5432 -a -q -f /home/jobs/Desktop/resources/postgresql.sql

Parametererklärungen:

-h PostgreSQL Server IP-Adresse
-d Datenbankname
-U Benutzername
-p Port, auf dem der PostgreSQL-Server hört
-f Pfad zum SQL-Skript
-a alles ausgeben
-q leise

0 Stimmen

Vielen Dank, dass Sie etwas Zeit damit verbracht haben, nach einer Option "-a" zu suchen.

11voto

Eric Leschinski Punkte 134271

Anleitung zum Ausführen eines SQL-Befehls auf der Befehlszeile für PostgreSQL in Linux:

Öffnen Sie ein Terminal und stellen Sie sicher, dass Sie den psql-Befehl ausführen können:

psql --version
which psql

Meine Version ist 9.1.6 und befindet sich in /bin/psql.

Erstellen Sie eine einfache Textdatei namens mysqlfile.sql

Bearbeiten Sie diese Datei und fügen Sie eine einzige Zeile ein:

select * from mytable;

Führen Sie diesen Befehl auf der Befehlszeile aus (ersetzen Sie Ihren Benutzernamen und den Namen Ihrer Datenbank durch pgadmin und kurz_prod):

psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql

Das Folgende ist das Ergebnis, das ich im Terminal erhalte (Ich werde nicht nach einem Passwort gefragt):

select * from mytable;

test1
--------
hi
ich auch

(2 rows)

0 Stimmen

Wie richten Sie einen Benutzer ein? Es ist das erste Mal, dass ich -f auf einer neuen .sql-Datei installiere und ausführe. Es sagt immer falsches Passwort.

4voto

abeginner Punkte 41

Sie können ein Eingabeaufforderungsfenster öffnen und als Administrator ausführen. Geben Sie dann Folgendes ein

../bin>psql -f c:/...-h localhost -p 5432 -d datenbankname -U "postgres"

Passwort für Benutzer postgres: wird angezeigt.

Geben Sie Ihr Passwort ein und drücken Sie Enter. Ich konnte das Passwort nicht sehen, das ich eingegeben habe, aber dieses Mal hat es funktioniert, als ich Enter gedrückt habe. Tatsächlich habe ich Daten in die Datenbank geladen.

1 Stimmen

Ich denke, du meinst -d "postgres"

0 Stimmen

@amphetamachine -d für den Datenbanknamen, überprüfe psql --help

2voto

jmm Punkte 1024

Eine kleine Verbesserung in der Antwort von @wingman__7 aus dem Jahr 2021: Wenn Ihr Benutzername bestimmte Zeichen enthält (bei mir ein Unterstrich), müssen Sie ihn mit dem -U Flag übergeben.
Das hat bei mir funktioniert:

$ psql -h db.host -d db_name -U my_user < query.sql

1voto

Chars Punkte 11

Ich habe das geschrieben (befindet sich im Verzeichnis, in dem mein Skript liegt)

::someguy@host::$sudo -u user psql -d my_database -a -f file.sql 

wo -u user die Rolle ist, die die Datenbank besitzt, in der ich das Skript ausführen möchte, dann verbindet sich psql mit der psql-Konsole, danach lädt -d my_database mich in mydatabase und schließlich -a -f file.sql, wo -a alle Eingaben aus dem Skript ausgibt und -f Befehle aus file.sql in mydatabase ausführt und dann beendet.

Ich benutze: psql (PostgreSQL) 10.12 auf (Ubuntu 10.12-0ubuntu0.18.04.1)

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