PostgreSQLデータベースにアクセスできないときの対処法

第四十五回
FATAL   C28000  MIdent authentication failed for user "rails"   Fauth.c L337   Rauth_failed

というエラーが出て,MigrationやconsoleからのDBアクセスが失敗したのでいろいろ調べてみると,こんな記述を発見しました.

it is due to Rails connecting to PostgreSQL via TCP socket, not UNIX socket, so in the pg_hba.conf you need to setup a “host” line, not a “local” line.

どうやらRailsPostgreSQLにアクセスする際にUNIX socketではなくTCP socketを利用していて,TCPを利用したアクセスではpasswordによるユーザ認証*1PostgreSQLの設定で許可されていないことが原因のようです.
同ページの対処法を試してみたところうまく動くようになったのでメモを残しておきます.

pg_hba.confを修正

データディレクトリにあるpg_hba.confファイルを以下のpg_hba.confの項に示すように修正します.データディレクトリとは,PostgreSQLをインストールした際に作成したdataディレクトリのことであり,私の場合は

/var/lib/pgsql/data

ですが,多くの場合

~postgres/data

というようにPostgreSQLユーザのホームディレクトリになっているようです.

pg_hba.conf
host    all         all         127.0.0.1/32          ident sameuser

となっている行を

host    all         all         127.0.0.1/32          password

のように修正して,PostgreSQLを再起動するとRailsからアクセスすることができるようになりました.

*1:PostgreSQLに対する