web-dev-qa-db-ja.com

非対話的にpsqlにパスワードを指定するにはどうすればいいですか?

私はシェルスクリプトを使用してデータベース作成プロセスを自動化しようとしていますが、psqlにパスワードを渡すことで障害になったことが1つあります。これがシェルスクリプトのコードです。

psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"

非対話的な方法でpsqlにパスワードを渡すにはどうすればいいですか?

ありがとうございます。

249
Alex N.

公式文書 から:

定期的にパスワードを入力しなくても済むように、〜/ .pgpassファイルを用意しておくと便利です。詳しくは 第30.13節 をご覧ください。

...

このファイルには、次の形式の行が含まれています。

hostname:port:database:username:password

現在の接続パラメータと一致する最初の行のパスワードフィールドが使用されます。

107
Flimzy

Psqlを呼び出す前に、スクリプト内でPGPASSWORD環境変数を設定してください。

PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName

参考として、 http://www.postgresql.org/docs/current/static/libpq-envars.html を参照してください。


編集

Postgres 9.2以降、ユーザー名を含むことができる 接続文字列またはURI を指定するオプションもあります。

実行中のプロセスのコマンドラインを見ると、パスワードがプレーンテキストで表示されるため、これを使用するとセキュリティ上のリスクがあります。他のユーザーによるps(Linux)、ProcessExplorer(Windows)、または同様のツールの使用。

この質問も参照してください データベース管理者

458
  • 一行で:

    export PGPASSWORD='password'; psql -h 'server name' -U 'user name' -d 'base name' -c 'command'
    

    with command"select * from schema.table"のようなsqlコマンド

  • もっと読みやすい:

    export PGPASSWORD='password'
    psql -h 'server name' -U 'user name' -d 'base name' \
         -c 'command' (eg. "select * from schema.table")
    
90
user4653174

私はpsqlにURLを渡すことを好む傾向があります。

psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"

これにより、環境変数に自由に名前を付けることができ、不要なファイルを作成しなくてすみます。

これにはlibpqが必要です。ドキュメントが見つかります ここ

24
Jacques Gaudin

これは、(Linux)ユーザーのホームディレクトリに.pgpassファイルを作成することで実行できます。 .pgpassファイルフォーマット:

<databaseip>:<port>:<databasename>:<dbusername>:<password>

詳細の代わりにワイルドカード*を使用することもできます。

パスワードを要求せずにtmp.sqlを実行したいとします。

次のコードで* .shファイルにできます

echo "192.168.1.1:*:*:postgres:postgrespwd" > $HOME/.pgpass
echo "` chmod 0600 $HOME/.pgpass `"

echo " ` psql -h 192.168.1.1 -p 5432  -U postgres  postgres  -f tmp.sql `        
19
Srini

Windowsの場合

  1. PGPASSWORDに値を割り当てます:C:\>set PGPASSWORD=pass

  2. コマンドを実行します。C:\>psql -d database -U user

準備ができて

あるいは一行で、

set PGPASSWORD=pass&& psql -d database -U user

&&の前にスペースがないことに注意してください。

18
JAGJ jdfoxito

Pg_env.shの内容を私の.bashrcに追加しました。

cat /opt/PostgreSQL/10/pg_env.sh

#!/bin/sh
# The script sets environment variables helpful for PostgreSQL

export PATH=/opt/PostgreSQL/10/bin:$PATH
export PGDATA=/opt/PostgreSQL/10/data
export PGDATABASE=postgres
export PGUSER=postgres
export PGPORT=5433
export PGLOCALEDIR=/opt/PostgreSQL/10/share/locale
export MANPATH=$MANPATH:/opt/PostgreSQL/10/share/man

(user4653174提案に従って)を追加して

export PGPASSWORD='password'
1
Rob