406 Stimmen

Postgresql: Scripting psql-Ausführung mit Passwort

Wie kann ich anrufen psql so dass es fragt nicht nach einem Passwort ?

Das habe ich:

psql -Umyuser < myscript.sql

Ich konnte jedoch das Argument für die Übergabe des Passworts nicht finden, so dass psql immer nach dem Passwort fragt.

22voto

ubi Punkte 3679

Eine Alternative zur Verwendung von PGPASSWORD Umgebungsvariable zu verwenden ist conninfo Zeichenkette gemäß der Dokumentation

Ein alternativer Weg, die Verbindung pa Zeichenkette oder einem URI, der anstelle eines Datenbanknamens verwendet wird. Dieser Mechanismus gibt Ihnen sehr viel Kontrolle über die Verbindung.

$ psql "host=<server> port=5432 dbname=<db> user=<user> password=<password>"

postgres=>

13voto

Femi Punkte 63590

Sie müssen eine Passwortdatei erstellen: siehe http://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html für weitere Informationen.

13voto

Jamie Hutber Punkte 24382

Wenn Sie wie ich Probleme mit Windows haben (ich verwende Windows 7 64-Bit) und set PGPASSWORD=[Password] hat nicht funktioniert.

Dann, wie Kavaklioglu in einem der Kommentare sagte,

export PGPASSWORD=[password]

Sie müssen dies am Anfang der Datei oder vor jeder Verwendung speichern, damit es vor dem Aufruf gesetzt wird.

Unter Windows funktioniert es auf jeden Fall :)

8voto

mightybyte Punkte 7274

Angesichts der Sicherheitsbedenken bei der Verwendung der Umgebungsvariablen PGPASSWORD halte ich die folgende Lösung für die beste:

  1. Schreiben Sie Ihre eigene temporäre pgpass-Datei mit dem Passwort, das Sie verwenden möchten.
  2. Verwenden Sie die Umgebungsvariable PGPASSFILE, um psql anzuweisen, diese Datei zu verwenden.
  3. Entfernen Sie die temporäre Datei pgpass

Hier sind einige Punkte zu beachten. Schritt 1 soll verhindern, dass die eventuell vorhandene Datei ~/.pgpass des Benutzers verändert wird. Sie müssen auch sicherstellen, dass die Datei die Berechtigung 0600 oder weniger hat.

Einige haben vorgeschlagen, die bash zu nutzen, um dies wie folgt abzukürzen:

PGPASSFILE=<(echo myserver:5432:mydb:jdoe:password) psql -h myserver -U jdoe -p 5432 mydb

Dabei wird die <()-Syntax verwendet, damit die Daten nicht in eine eigentliche Datei geschrieben werden müssen. Aber es funktioniert nicht, weil psql prüft, welche Datei verwendet wird und einen Fehler wie diesen ausgibt:

WARNING: password file "/dev/fd/63" is not a plain file

8voto

pyAddict Punkte 1366

Dies kann einfach mit PGPASSWORD geschehen. Ich verwende psql 9.5.10. In Ihrem Fall würde die Lösung lauten

PGPASSWORD=password psql -U myuser < myscript.sql

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