私はシェルスクリプトを使用してデータベース作成プロセスを自動化しようとしていますが、psqlにパスワードを渡すことで障害になったことが1つあります。これがシェルスクリプトのコードです。
psql -U $DB_USER -h localhost -c"$DB_RECREATE_SQL"
非対話的な方法でpsqlにパスワードを渡すにはどうすればいいですか?
ありがとうございます。
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)、または同様のツールの使用。
この質問も参照してください データベース管理者
一行で:
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")
私はpsqlにURLを渡すことを好む傾向があります。
psql "postgresql://$DB_USER:$DB_PWD@$DB_SERVER/$DB_NAME"
これにより、環境変数に自由に名前を付けることができ、不要なファイルを作成しなくてすみます。
これにはlibpq
が必要です。ドキュメントが見つかります ここ
これは、(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 `
Windowsの場合
PGPASSWORDに値を割り当てます:C:\>set PGPASSWORD=pass
コマンドを実行します。C:\>psql -d database -U user
準備ができて
あるいは一行で、
set PGPASSWORD=pass&& psql -d database -U user
&&の前にスペースがないことに注意してください。
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'