次のシナリオがあります。
saji@geeklap:~$ psql -U postgres
psql: FATAL: Ident authentication failed for user "postgres"
saji@geeklap:~$ psql -h localhost -U postgres
Password for user postgres:
psql (8.4.14)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=#
システムにインストールされているpostgresql
サーバーにユーザーpostgres
としてログインしようとしています。 -h localhost
を指定した場合にのみログインできます。一方、psql
ドキュメントには次のように書かれています。
ホスト名を省略すると、psqlはUnixドメインソケットを介してローカルホスト上のサーバーに接続するか、TCP/IPを介してUnixドメインソケットを持たないマシンのローカルホストに接続します。
Ref:http://www.postgresql.org/docs/current/static/app-psql.html#R2-APP- PSQL-CON
ホストを指定せずにログインできないのはなぜですか。psql
のドキュメントで説明されているように、何かを変更する必要がある構成ファイルがありますか?
実際、文書化されたとおりに機能します。
ホスト名を省略すると、psql
はパスがコンパイルされたUnixドメインソケットに接続します。その部分はあなたのケースで機能します。そうしないと、質問が示すものとは異なるエラーメッセージが出力されます。
質問のエラーメッセージ:
psql: FATAL: Ident authentication failed for user "postgres"
unixドメインソケットを使用する場合、Unixユーザーpostgresのみがデータベースユーザーpostgresとして接続する権限を持っているという事実に関連しています。これはpg_hba.conf
ファイルで設定されます。
通常のユーザーとしてログインし、システムの管理者である場合にUbuntuで通常行うべきこと:
$ Sudo -u postgres psql
UNIXソケットを介した接続のデフォルトが気に入らない場合は、環境変数PGHOST
を設定できます。私は持っています
export PGHOST="db"
~/.bashrc
で、その名前でサーバーに接続します。さらに便利な環境変数は http://www.postgresql.org/docs/9.5/static/libpq-envars.html に文書化されています