J'ai écrit un script dans les index REINDEX
d'une base de données. Voici l'un d'entre eux:
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
Le problème est que je ne peux pas exécuter ce script en mode autonome. psql
demande un mot de passe à chaque exécution. Il existe également deux limitations:
Je ne peux pas créer d'utilisateur sur la base de données sans mot de passe.
Parce que REINDEX
verrouille les tables, je devrais utiliser sleep <num>
entre chaque REINDEX
.
Existe-t-il une solution automatique?
Vous avez quatre choix concernant l'invite de mot de passe:
Un exemple simple avec PGPASSWORD
sera quelque chose comme:
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME
J'espère que cela aide.
En fonction des autorisations de votre compte, l'exemple sans spécifier la base de données peut échouer, car les autorisations utilisateur sont comparées à la base de données à laquelle vous vous connectez. Il vaut mieux aussi spécifier explicitement la base de données.
# 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
Réponses très utiles dans ce fil. J'ajoute juste ceci pour Ubuntu 18.04:
Sudo PGPASSWORD=yourpasswordHere -u postgres psql
Cela vous emmènera dans les postgres sans l'invite de mot de passe, sans avoir à définir de variables d'environnement. Ce n'est pas un cadre permanent.