パスワードプロンプトなしでpsqlを使用するには?


70

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ロック・テーブルは、私が使用する必要がありsleep <num>、それぞれの間REINDEX

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

回答:


111

パスワードプロンプトに関して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

4
PostgreSQL 9.1以降peer、ローカル接続用の認証方法もあります。現在、Linux、BSD、OS X、またはSolarisのみ(Windowsではありません)。
アーウィンブランドステッター

1
上のノート.pgpassオプション、あなたはまだ(普段ただろう場合)には、ユーザ名、データベース、およびホスト名を指定する必要がありますpsqlコマンド
ラファエル

3に関しては、メソッドを編集する必要があります。ここで説明しています:gist.github.com/p1nox/4953113
FuzzyAmi

簡単に使用export PGPASSWORD="your_pw"してバージョン1に
移行

18

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

PGPASSWORD=YOUR_PASSRORD psql -h YOUR_PG_HOST -U YOUR_USER_NAME

それが役に立てば幸い。


4
こんにちはIan_H、あなたのコメントに感謝し、私はすべてあなたのポイントに同意します。受け入れられた答えは非常に包括的であり、それが私の問題を解決しました。私がこの古い投稿に私の答えをした理由は、他の人が同じ気持ちを持っているかもしれないと信じているので、それはまだ私にとって簡単ではないからです。
pdm

これは間違いなく受け入れられた答えへの良い追加でした-ENV varを永続的に設定する必要はないことを思い出してください。
ケブラー

1

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

# 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  

0

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

sudo PGPASSWORD=yourpasswordHere -u postgres psql

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


これをしないでください:パスワードはps -efの出力に表示されます。
Colin 't Hart
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.