web-dev-qa-db-ja.com

パスワードプロンプトなしでpsqlを使用する方法

データベースの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つの制限があります。

  1. パスワードなしでデータベースにユーザーを作成できません。

  2. REINDEXはテーブルをロックするため、各REINDEXの間にはsleep <num>を使用する必要があります。

自動解決策はありますか?

83
Majid Azimi

パスワードプロンプトに関しては、4つの選択肢があります。

  1. pGPASSWORD環境変数を設定します。詳細はマニュアルをご覧ください:
    http://www.postgresql.org/docs/current/static/libpq-envars.html
  2. .pgpassファイルを使用してパスワードを保存します。詳細はマニュアルをご覧ください:
    http://www.postgresql.org/docs/current/static/libpq-pgpass.html
  3. その特定のユーザーに「信頼認証」を使用します。
    http://www.postgresql.org/docs/current/static/auth-methods.html#AUTH-TRUST
  4. すべてを含む接続URIを使用します。
    http://www.postgresql.org/docs/current/static/libpq-connect.html#AEN42532
127

PGPASSWORDの簡単な例は次のようになります。

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_Host -U YOUR_USER_NAME

それが役に立てば幸い。

22
pdm

アカウントの権限によっては、データベースを指定しない例は、接続するデータベースに対してユーザーの権限がチェックされるため、失敗する可能性があります。データベースも明示的に指定することをお勧めします。

# 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

このスレッドで非常に役立つ回答。私はこれをubuntu 18.04に追加しています:

Sudo PGPASSWORD=yourpasswordHere -u postgres psql

これにより、環境変数を設定しなくても、パスワードプロンプトなしでpostgresにアクセスできます。これは永続的な設定ではありません。

0
Dhiraj