it-swarm.com.de

Führen Sie eine PostgreSQL-SQL-Datei mit Befehlszeilenargumenten aus

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.

459
CSharpened

Sie haben vier Möglichkeiten, ein Passwort einzugeben:

  1. Legen Sie die Umgebungsvariable PGPASSWORD fest. Einzelheiten finden Sie im Handbuch:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. Verwenden Sie eine .pgpass-Datei, um das Kennwort zu speichern. Einzelheiten finden Sie im Handbuch:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. Verwenden Sie für diesen bestimmten Benutzer die "Vertrauensauthentifizierung": http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. Seit PostgreSQL 9.1 können Sie auch eine Verbindungszeichenfolge verwenden :
    https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
130

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
414
pmverma

Du solltest es so machen:

\i path_to_sql_file

Sehen:

Enter image description here

264
Rachid Oussanaa
export PGPASSWORD=<password>
psql -h <Host> -d <database> -U <user_name> -p <port> -a -w -f <file>.sql
40
vishu9219

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

31
GPrathap

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.

26
Florian

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
25
Satish Sharma

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
15
Deepu Sahni

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.

9
MDK

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)
7
Eric Leschinski

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.

4
abeginner