496

シェルスクリプトを使用してデータベース作成プロセスを自動化しようとしていますが、パスワードをpsqlに渡すことで障害が発生しました。以下は、シェル スクリプトのコードの一部です。

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

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

4

9 に答える 9

880

psql を呼び出す前に、スクリプト内で PGPASSWORD 環境変数を設定します。

PGPASSWORD=pass1234 psql -U MyUsername myDatabaseName

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


編集

Postgres 9.2 以降、ユーザー名パスワードを含む接続文字列または URIを指定するオプションもあります。構文は次のとおりです。

$ psql postgresql://[user[:password]@][host][:port][,...][/dbname][?param1=value1&...]

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

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

于 2011-06-19T21:46:43.363 に答える
199

公式ドキュメントから:

~/.pgpass ファイルを用意しておくと、定期的にパスワードを入力する手間を省くことができて便利です。詳細については、セクション 30.13を参照してください。

...

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

hostname:port:database:username:password

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

于 2011-06-19T21:15:05.260 に答える
28

.pgpassこれは、(Linux) ユーザーのホーム ディレクトリにファイルを 作成することで実行できます。.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 `        
于 2012-03-28T12:33:07.770 に答える
8

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'
于 2019-04-17T11:47:15.520 に答える