Ich habe einige .sql-Dateien mit Tausenden von INSERT-Anweisungen und muss diese Einfügungen in 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 dort auszuführen. Ich habe im Internet festgestellt, dass Sie Folgendes verwenden können, indem Sie zum Ordner bin Ihrer PostgreSQL-Installation navigieren:
psql -d myDataBase -a -f myInsertFile
In meinem Fall:
psql -d HIGHWAYS -a -f CLUSTER_1000M.sql
Ich werde dann nach einem Passwort für meinen Benutzer gefragt, kann aber nichts eingeben. Wenn ich die Eingabetaste drücke, wird folgende Fehlermeldung angezeigt:
psql: FATAL: Kennwortauthentifizierung für Benutzer "myUsername" fehlgeschlagen
Warum kann ich dann kein Passwort eingeben? Gibt es einen Ausweg, da es wichtig ist, dass ich diese Skripte ausführen kann?
Ich habe dieses Problem umgangen, indem ich einen neuen Eintrag in meine Datei pg_hba.conf mit der folgenden Struktur eingefügt habe:
# IPv6 local connections:
host myDbName myUserName ::1/128 trust
Die Datei pg_hba.conf befindet sich normalerweise im Ordner 'data' Ihrer PostgreSQL-Installation.
quelle
Antworten:
Sie haben vier Möglichkeiten, ein Passwort einzugeben:
http://www.postgresql.org/docs/current/static/libpq-envars.html
http://www.postgresql.org/docs/current/static/libpq-pgpass.html
https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
quelle
-u
Parameter wie im Handbuch dokumentiertNatürlich wird bei der Authentifizierung ein schwerwiegender Fehler angezeigt, da Sie keinen Benutzernamen angeben ...
Versuchen Sie dieses, es ist OK für mich :)
Wenn die Datenbank remote ist, verwenden Sie denselben Befehl mit dem Host
quelle
-a
Parameter?-a
wird hier nicht benötigt. Es ist "Alle nicht leeren Eingabezeilen auf StandardausgabeSie sollten es so machen:
Sehen:
quelle
Permission denied
chmod 777 myfile
FehlerPermission denied
behoben wurdenVerwenden Sie diese Option, um * .sql-Dateien auszuführen, wenn sich der PostgreSQL-Server an einer anderen Stelle befindet:
Anschließend werden Sie aufgefordert, das Kennwort des Benutzers einzugeben.
BEARBEITEN: aktualisiert basierend auf dem Kommentar von @zwacky
quelle
-a
: alle Echo ,-q
: leise ,-f
: Dateiquelle
Wenn Sie in der Linux-Shell bei psql angemeldet sind, lautet der Befehl:
für einen absoluten Weg und
für den relativen Pfad, von dem aus Sie psql aufgerufen haben.
quelle
Melden Sie sich über das Terminal bei Ihrer Datenbank an und versuchen Sie Folgendes:
oder
oder
quelle
Sie können sowohl den Benutzernamen als auch PASSSWORD in der Befehlszeile selbst angeben.
quelle
Sie könnten es sogar so machen:
Wenn Sie
sudo
Zugriff auf den Computer haben und dies nicht für Produktionsskripte empfohlen wird, sondern nur zum Testen auf Ihrem eigenen Computer, ist dies der einfachste Weg.quelle
Führen Sie durch, wie Sie SQL in der Befehlszeile für PostgreSQL unter Linux ausführen:
Öffnen Sie ein Terminal und stellen Sie sicher, dass Sie den folgenden
psql
Befehl ausführen können :Meins ist Version 9.1.6 in
/bin/psql
.Erstellen Sie eine einfache Textdatei mit dem Namen
mysqlfile.sql
Bearbeiten Sie diese Datei und fügen Sie dort eine einzelne Zeile ein:
Führen Sie diesen Befehl in der Befehlszeile aus (ersetzen Sie pgadmin und kurz_prod durch Ihren Benutzernamen und den Namen Ihrer Datenbank):
Das folgende Ergebnis wird auf dem Terminal angezeigt (ich werde nicht zur Eingabe eines Kennworts aufgefordert):
quelle
Sie können eine Eingabeaufforderung öffnen und als Administrator ausführen. Geben Sie dann ein
Password for user postgres:
wird auftauchen.Geben Sie Ihr Passwort ein und geben Sie ein. Ich konnte das eingegebene Passwort nicht sehen, aber diesmal funktionierte es, wenn ich die Eingabetaste drückte. Eigentlich habe ich Daten in die Datenbank geladen.
quelle
-d "postgres"
-d
für Datenbanknamen, überprüfen Siepsql --help
Ich habe das geschrieben (befindet sich in dem Verzeichnis, in dem sich mein Skript befindet)
Wo
-u user
ist die Rolle, der die Datenbank gehört, in der ich das Skript ausführen möchte? Dann wird diepsql
Verbindung zurpsql
Konsole hergestellt. Danach wird-d my_database
ichmydatabase
geladen,-a -f file.sql
wo-a
alle Eingaben aus dem Skript wiedergegeben und-f
Befehle vonfile.sql
in ausgeführt werdenmydatabase
und dann beendet werden.Ich benutze: psql (PostgreSQL) 10.12 on (Ubuntu 10.12-0ubuntu0.18.04.1)
quelle