it-swarm-eu.dev

Wie verwende ich psql ohne Passwortabfrage?

Ich habe ein Skript für REINDEX -Indizes in einer Datenbank geschrieben. Hier ist einer von ihnen:

echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
    echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
    echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
    exit 1
fi

Das Problem ist, dass ich dieses Skript nicht im Standalone-Modus ausführen kann. psql fordert bei jeder Ausführung zur Eingabe eines Kennworts auf. Es gibt auch zwei Einschränkungen:

  1. Ich kann keinen Benutzer in einer Datenbank ohne Passwort erstellen.

  2. Da REINDEX Tabellen sperrt, sollte ich zwischen jedem REINDEXsleep <num> Verwenden.

Gibt es eine automatische Lösung?

83
Majid Azimi

Sie haben vier Möglichkeiten bezüglich der Passwortabfrage:

  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 Passwort zu speichern. Einzelheiten finden Sie im Handbuch:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. verwenden Sie "Vertrauensauthentifizierung" für diesen bestimmten Benutzer:
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. verwenden Sie einen Verbindungs-URI, der alles enthält:
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532
127

Ein einfaches Beispiel mit PGPASSWORD lautet wie folgt:

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME

Ich hoffe es hilft.

22
pdm

Abhängig von Ihren Kontoberechtigungen kann das Beispiel ohne Angabe der Datenbank fehlschlagen, da Benutzerberechtigungen mit der Datenbank verglichen werden, zu der Sie eine Verbindung herstellen. Es ist besser, auch die Datenbank explizit anzugeben.

# this can fail.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME    

# this is more likely to work, assuming given account has permissions to that database.
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME -d YOUR_DATABASE  
2
mtoonen

Sehr hilfreiche Antworten in diesem Thread. Ich füge dies nur für Ubuntu 18.04 hinzu:

Sudo PGPASSWORD=yourpasswordHere -u postgres psql

Dadurch gelangen Sie ohne die Eingabeaufforderung zum Kennwort in die Postgres, ohne Umgebungsvariablen festlegen zu müssen. Dies ist keine permanente Einstellung.

0
Dhiraj