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\
修正手順は、
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に戻します。