Edited at

psqlでログインするときのパスワード入力を省略する

More than 1 year has passed since last update.


PostgreSQLでパスワード認証せずにログイン

PostgreSQLでpsqlでログインをする際は、MySQLと違ってパスワード入力を求められてしまってスクリプトを連続で実行することができない。

そうなるとバッチ処理の実施などにも影響が出てしてしまうが、下記二つの方法で回避できることが確認できた。


.pgpassで対応する方法

1.実行したいユーザのHOMEディレクトリにてviコマンドで「.pgpass」ファイルを作成する。

vi .pgpass

2.以下の書式に沿ってファイルに接続情報を記載していく。

  複数定義したい場合は同様の書式で複数行記述していくだけ。

  コメントアウトはシェルなどと同じく「#」を行頭につける。

ホスト名:ポート:データベース名:ユーザ:パスワード

例):192.168.1.111:9876:postgres01:dba_user:password

※ホスト名、ポート、データベース名には「」も指定可能。

 「
」を指定した場合の意味は、いずれも可(制限なし)となる。

3.作成した「.pgpass」ファイルの権限を 600 に変更する。

chmod 600 .pgpass

※「.pgpass」を作成してもパーミッションが600でないとワーニングとなってしまい、パスワードの入力を求められてしまうので注意。

# psql -d postgres01 -h 192.168.1.111 -U dba_user

WARNING: password file "/root/.pgpass" has group or world access; permissions should be u=rw (0600) or less
Password for user dba_user:

※.pgpassを配置するディレクトリについては「PGPASSFILE」という環境変数で設定を変更することが可能。


環境変数を利用する方法

1.psqlはPASSWORDという変数が設定されているとそのパスワードを取りに行く動作の様なので、

  「PGPASSWORD」という環境変数を事前に設定しておくことでもパスワード認証を省略可能。

  「.bash_profile」などに事前に設定しておくと手間が省けて尚良し。

export PGPASSWORD=password

※「PGPASSWORD」はマニュアル的には非推奨の模様だし、環境変数なので複数のDBユーザーをまとめて記載できない。

 そこら辺を考えると「.pgpass」を使用する方が個人的にもお薦めかと・・・。


参考

PostgreSQL 9.1.5文書 31.13.環境変数

【PostgreSQL】psqlにてパスワードを省略する方法