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 der folgende Fehler angezeigt:
psql: FATAL: Kennwortauthentifizierung für Benutzer "myUsername" fehlgeschlagen
Warum kann ich 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 mit der folgenden Struktur in meine Datei pg_hba.conf 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.
Sie haben vier Möglichkeiten, ein Passwort einzugeben:
Natürlich erhalten Sie einen schwerwiegenden Fehler bei der Authentifizierung, da Sie keinen Benutzernamen angeben ...
Versuchen Sie dieses, es ist OK für mich :)
psql -U username -d myDataBase -a -f myInsertFile
Wenn die Datenbank remote ist, verwenden Sie denselben Befehl mit Host
psql -h Host -U username -d myDataBase -a -f myInsertFile
Du solltest es so machen:
\i path_to_sql_file
Sehen:
export PGPASSWORD=<password>
psql -h <Host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
Verwenden Sie diese Option, 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 PostgreSQL server IP address
-d database name
-U user name
-p port which PostgreSQL server is listening on
-f path to SQL script
-a all echo
-q quiet
Anschließend werden Sie aufgefordert, das Passwort des Benutzers einzugeben.
BEARBEITEN: aktualisiert auf der Grundlage des Kommentars von @zwacky
Wenn Sie in psql auf der Linux-Shell angemeldet sind, lautet der Befehl:
\i fileName.sql
für einen absoluten Weg und
\ir filename.sql
für den relativen Pfad, von dem aus Sie psql aufgerufen haben.
Melden Sie sich über das Terminal bei Ihrer Datenbank an und versuchen Sie Folgendes:
database-# >@pathof_mysqlfile.sql
oder
database-#>-i pathof_mysqlfile.sql
oder
database-#>-c pathof_mysqlfile.sql
Sie können sowohl den Benutzernamen als auch das PASSWORT in der Befehlszeile selbst eingeben.
psql "dbname='urDbName' user='yourUserName' password='yourPasswd' Host='yourHost'" -f yourFileName.sql
du könntest es sogar so machen:
Sudo -u postgres psql -d myDataBase -a -f myInsertFile
Wenn Sie Sudo
Zugriff auf die Maschine haben und dies nicht für Produktionsskripte empfohlen wird, nur um sie auf Ihrer eigenen Maschine zu testen, ist dies der einfachste Weg.
Führen Sie in der Befehlszeile für PostgreSQL unter Linux die folgenden Schritte aus, um SQL auszuführen:
Öffnen Sie ein Terminal und stellen Sie sicher, dass Sie den Befehl psql
ausführen können:
psql --version
which psql
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:
select * from mytable;
Führen Sie diesen Befehl in der Befehlszeile aus (ersetzen Sie pgadmin und kurz_prod durch Ihren Benutzernamen und den Namen Ihrer Datenbank):
psql -U pgadmin -d kurz_prod -a -f mysqlfile.sql
Folgendes ist das Ergebnis, das ich auf dem Terminal erhalte (ich werde nicht zur Eingabe eines Passworts aufgefordert):
select * from mytable;
test1
--------
hi
me too
(2 rows)
Sie können eine Eingabeaufforderung öffnen und als Administrator ausführen. Dann tippe
../bin>psql -f c:/...-h localhost -p 5432 -d databasename -U "postgres"
Password for user postgres:
wird angezeigt.
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.