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

709voto

pmverma Punkte 6521

Natürlich erhalten Sie einen schwerwiegenden Fehler bei der Authentifizierung, weil Sie keinen Benutzernamen angegeben haben...

Versuchen Sie diesen, für mich ist es in Ordnung :)

psql -U Benutzername -d meineDatenbank -a -f meineEinfügedatei

Wenn die Datenbank entfernt ist, verwenden Sie denselben Befehl mit dem Host

psql -h Host -U Benutzername -d meineDatenbank -a -f meineEinfügedatei

4 Stimmen

Bitte beachten Sie, dass der angegebene Benutzername eine gültige Postgres-Rolle sein muss. Standardmäßig handelt es sich um den aktuell angemeldeten Benutzer.

27 Stimmen

Warum das -a Parameter?

18 Stimmen

@AlikElzin-kilaka -a wird hier nicht benötigt. Es lautet "Drucken Sie alle nicht leeren Eingabezeilen beim Lesen auf die Standardausgabe"

449voto

Rachid O Punkte 11459

Du solltest es so machen:

\i Pfad_zur_SQL_Datei

Siehe:

Bildbeschreibung hier eingeben

3 Stimmen

Ich bekomme Zugriff verweigert

5 Stimmen

Nachdem chmod 777 datei Fehler Zugriff verweigert behoben wurde

15 Stimmen

@Zac, wenn deine Berechtigungsverweigerung auf einer Windows-Maschine auftrat, könntest du die falschen Schrägstriche verwenden.

193voto

a_horse_with_no_name Punkte 489934

Sie haben vier Möglichkeiten, um ein Passwort bereitzustellen:

  1. Setzen Sie die Umgebungsvariable PGPASSWORD. Weitere Details finden Sie im Handbuch:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Verwenden Sie eine .pgpass-Datei, um das Passwort zu speichern. Weitere Details finden Sie im Handbuch:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Verwenden Sie die "trust authentication" für diesen spezifischen Benutzer: http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. Seit PostgreSQL 9.1 können Sie auch einen Verbindungszeichenfolge verwenden:
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

0 Stimmen

Hallo. Ich habe die Einstellungen jetzt auf "trust" gesetzt, aber ich bemerke, dass die Software versucht, meinen Windows-Benutzernamen zu verwenden, um sich anzumelden. Ich möchte eine Rolle verwenden, die ich in meiner PostgreSQL-Datenbank eingerichtet habe. Gibt es eine Möglichkeit, ihr mitzuteilen, welche Rolle verwendet werden soll, um den Befehl auszuführen?

2 Stimmen

@CSharpened: Verwenden Sie den -u Parameter wie im Handbuch dokumentiert.

1 Stimmen

2 ist extrem einfach. Fügen Sie einfach eine Zeile hinzu, die host:port:db:user:pass zu einer Datei enthält, und Sie sind fertig. Gute Arbeit.

81voto

Florian Punkte 930

Wenn Sie in psql in der Linux-Shell angemeldet sind, lautet der Befehl:

\i Dateiname.sql

für einen absoluten Pfad und

\ir Dateiname.sql

für den relativen Pfad von dem aus Sie psql aufgerufen haben.

0 Stimmen

Wie @Florian sagt, können Sie nach dem Anmelden eine Datei ausführen. Denken Sie daran, alle Kommentarzeilen in Ihrem SQL als eine der beiden Optionen zu kennzeichnen ...-- Kommentar bis zum Ende der Zeile a) -- Einzeiliger Kommentar ODER b) /* Mehrzeilige Kommentare */

0 Stimmen

Wow, vielen Dank, es lief sehr gut.

81voto

GPrathap Punkte 6609

Verwenden Sie dies, um *.sql-Dateien auszuführen, wenn sich der PostgreSQL-Server an einem anderen Ort befindet:

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

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

Dann werden Sie aufgefordert, das Passwort des Benutzers einzugeben.

BEARBEITEN: basierend auf dem Kommentar von @zwacky aktualisiert

8 Stimmen

@ChickenWing24 -a: alle Echos, -q: leise, -f: Datei

1 Stimmen

Funktioniert dies ohne Datenbank? Ich versuche, eine neue Datenbank mit diesem Tool auf dem vorhandenen Server zu erstellen.

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