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=#