psql コマンドで PostgreSQL に接続する時パスワード入力を省略する方法
psql
コマンドで PostgreSQL に接続する時、いつも対話式プロンプトでパスワードを尋ねられる。コレが面倒なので省略したい。
調べたところ、専用の設定ファイルを用意して、接続先 URL やユーザ名とともにパスワードを書いておけば、それを読み取ってアクセスしてくれるようだ。
だが、Windows と Mac とで設定ファイルの配置場所と名前に違いがあったので、それぞれ紹介する。
目次
Mac での設定方法
Mac の場合は、ホームディレクトリに .pgpass
というファイルを置く。~/.pgpass
である。
# 「localhost:5432」の「my_local_db」という DB に対し、ユーザ名「postgres」、パスワード「PASSWORD」で接続する、という設定
# ホームディレクトリ直下に .pgpass というファイルを生成してこの内容を記載する
$ echo 'localhost:5432:my_local_db:postgres:PASSWORD' > ~/.pgpass
# .pgpass ファイルはアクセス権を 600 に設定しないといけないので設定する
$ chmod 600 ~/.pgpass
Windows での設定方法
Windows の場合は、%APPDATA%\postgresql\
配下に pgpass.conf
というファイル名で設定ファイルを置く。ホームディレクトリ (C:\Users\【ユーザ名】\
) 直下ではなく、ファイル名も .pgpass
ではなく pgpass.conf
であることに注意。
このあとも説明するが、pgpass.conf
の書式は、Mac の .pgpass
と同じ。Windows ではアクセス権の設定はしなくても大丈夫なようだ。
pgpass
ファイルの書式
上述の Mac の場合のコマンドにも書いたが、pgpass
ファイルの書式は以下のとおり。
hostname:port:database:username:password
全てコロン :
で区切る。
つまり、「localhost」の「5432」ポート、「my_local_db
」という名前のデータベースに接続するとして、ユーザ名「postgres」、パスワードが「PASSWORD」なら、以下のように記述する。
localhost:5432:my_local_db:postgres:PASSWORD
以上
コレで次のように psql
コマンドを叩くと、パスワード入力を求められることなく接続できるようになった。
$ psql -U postgres --dbname=my_local_db
psql (11.0)
Type "help" for help.
my_local_db=#