データベースのREINDEX
インデックスにスクリプトを書きました。以下はその1つです。
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
問題は、このスクリプトをスタンドアロンモードで実行できないことです。 psql
は実行するたびにパスワードを要求します。また、2つの制限があります。
パスワードなしでデータベースにユーザーを作成できません。
REINDEX
はテーブルをロックするため、各REINDEX
の間にはsleep <num>
を使用する必要があります。
自動解決策はありますか?
パスワードプロンプトに関しては、4つの選択肢があります。
PGPASSWORD
の簡単な例は次のようになります。
PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME
それが役に立てば幸い。
アカウントの権限によっては、データベースを指定しない例は、接続するデータベースに対してユーザーの権限がチェックされるため、失敗する可能性があります。データベースも明示的に指定することをお勧めします。
# 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
このスレッドで非常に役立つ回答。私はこれをubuntu 18.04に追加しています:
Sudo PGPASSWORD=yourpasswordHere -u postgres psql
これにより、環境変数を設定しなくても、パスワードプロンプトなしでpostgresにアクセスできます。これは永続的な設定ではありません。