Windows10でPostgresにログインできない場合の解決策

psql コマンドでPostgresにログインする際、
>psql
とユーザ名を省略するとOSのログインユーザ名が使われます。
このため、OSのログインユーザ名は通常Postgresのインストール時にはrootユーザとして登録されないのでログインに失敗します。
または、根本的にPostgresのインストール時に指定したrootユーザのパスワードを忘れてしまった場合には当然ログインできません。

解決のためには、Postgresのログイン情報を書き換える必要があります。まず、
1)Postgresにログイン設定を変更し強制的にログインしてから、
2)ログイン情報を書き換え、
3)ログイン設定を正常に戻します。
これには次の二つのファイルが関係しています。括弧内はそれぞれのパスを示します。
1)pg_hba.conf (C:\Program Files\PostgreSQL\<バージョン番号>\data)
2)pgpass.conf (C:\Users\\AppData\Roaming\postgresql)

修正手順は、
1)pg_hba.confを下記のように変更し、パスワードなしで強制的にログインできるようにする。
ファイル末尾付近の「# IPv4 local connections:」を探し、文末のMETHODをmd5からtrustに変える。
これにより、ユーザ名を省略した場合pgpass.confを見に行くようになります。

[pg_hba.confの内容]
# If you want to allow non-local connections, you need to add more
# "host" records.  In that case you will also need to make PostgreSQL
# listen on a non-local interface via the listen_addresses
# configuration parameter, or via the -i or -h command line switches.

       (途中省略)

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
#host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

2)pgpass.conf内の末尾に何か書かれていると、それがルートユーザのパスワードになります。
指定が無ければ、psqlでPostgresの起動時にパスワードを聞いてきます。

[pgpass.confの内容]
localhost:5432:*:postgres:(デフォルトのパスワード文字列)

起動時パスワードを聞いてこない設定
localhost:5432:*:postgres:root  (rootユーザpostgres、パスワードroot)
起動時パスワードを聞いてくる設定
localhost:5432:*:postgres:  

Postgresにログインしたら、alterコマンドを使ってユーザーに希望のパスワード文字列を与えます。
alter role postgres with password ‘パスワード文字列’;

3)pg_hba.confの変更箇所を元のmd5に戻します。

カテゴリー: PostgreSQL パーマリンク