PostgreSQLでちゃんとユーザーにログイン権限とパスワードを設定しているのに、
psql: FATAL: ユーザ "postgres" で対向(peer)認証に失敗しました
のようなエラーが出てしまった場合の対処法です。
そもそもPeer認証とは
CentOS6でPostgreSQLインストール – My Octopress Blog
Peer認証とは、カーネルからクライアント上のシステムユーザ名を取得し、PostgreSQLデータベースユーザと同一である場合のみ接続が許可される仕組みです。
つまり、Postgresql内のユーザーとUNIXユーザで、ユーザー名が一致してさえいれば認証情報なしでログイン出来てしまう仕組みです。
パスワードを打たなくてもいいのは楽ですが、例えばユーザーごとに権限を変えて置いて、場合によって使い分けたいときや一時的に別のpsqlユーザーとしてログインしたいときなどはかなりやりづらいですし、psql側でユーザーを作る際に、同名のUNIXユーザーも追加する必要が出てくるのでとてもめんどくさいです。
この挙動を変更するには、pg_hba.conf (だいたいpsqlのデータフォルダか/etcにあるはずです。)を編集します。
ファイルを開くと
#ローカルで動いているpsqlへアクセスする場合 local all all peer #他のクライアントからpsqlへアクセス可能にする場合(例) host all all 127.0.0.1/32 peer
などとなっているか、あるいはコメントアウトされているかと思いますので、これを書き換えます。
#ローカルで動いているpsqlへアクセスする場合 local all all md5 #他のクライアントからpsqlへアクセス可能にする場合(例) host all all 127.0.0.1/32 md5
パスワード認証させたい場合は”peer”の部分を”md5″に変更して保存し、psqlのデーモンを再起動させます。
これで再度ログインを行えば、今度はパスワードを求められ、正しい情報を入力すればどのユーザーでもログインできるようになるかと思います。