web-dev-qa-db-ja.com

スクリプトでPostgreSQLデータベースのパスワードを設定する方法

私が書いているbashスクリプトでは、データベースを作成し、スクリプトによって自動的に生成されるパスワードを設定する必要があります。

問題は、ユーザーの介入なしにパスワードを設定する方法が見つからないことです。

私はこのようなものが必要です:

$ createdb mydb -p $(cat password_file)

何か案は?

4
ChocoDeveloper

ドキュメント から:

createdbは、SQLコマンドCREATE DATABASEのラッパーです。このユーティリティを使用してデータベースを作成する場合と、サーバーにアクセスするための他の方法を使用する場合で、効果的な違いはありません。

これは、次のようなコマンドを発行するスクリプトを記述できることを意味します

psql -f createdb.sql -v passwd=$passwd -v user=$user

createdb.sqlには次のようなものが含まれます

CREATE ROLE :user WITH LOGIN PASSWORD :passwd;
CREATE DATABASE mydb OWNER :user;
GRANT {some privileges on the newly created database and/or its objects};

これは、作成されたすべてのデータベースのユーザーを持つことを意味します。

(同時に私はあなたの問題がrioujが答えたものであると穏やかに疑っています。)

8
dezso

PostgreSQLインスタンスに接続し、クライアントであるcreatedbスクリプトを実行するには、パスワードファイルを使用できます。このファイルは通常~/.pgpassにあり、これらの情報を含む必要があります。

hostname:port:database:username:password

パスワードファイルに別のパスを使用する場合は、PGPASSFILE環境変数を設定できます。

セキュリティ上の懸念がある場合は、権限を変更できます。

chmod 600 ~/.pgpass

createdbでパスワードの入力を求められないようにするには、-wスイッチ(または--no-password)を使用してパスワードファイルを使用できます。

これらの機能のドキュメントをご覧ください。

3
riouj