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:
Ich kann keinen Benutzer in einer Datenbank ohne Passwort erstellen.
Da REINDEX
Tabellen sperrt, sollte ich zwischen jedem REINDEX
sleep <num>
Verwenden.
Gibt es eine automatische Lösung?
Sie haben vier Möglichkeiten bezüglich der Passwortabfrage:
Ein einfaches Beispiel mit PGPASSWORD
lautet wie folgt:
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME
Ich hoffe es hilft.
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
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.