web-dev-qa-db-ja.com

psqlをデフォルトでlocalhostにするにはどうすればよいですか?

次のシナリオがあります。

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のドキュメントで説明されているように、何かを変更する必要がある構成ファイルがありますか?

8
saji89

実際、文書化されたとおりに機能します。

ホスト名を省略すると、psqlはパスがコンパイルされたUnixドメインソケットに接続します。その部分はあなたのケースで機能します。そうしないと、質問が示すものとは異なるエラーメッセージが出力されます。

質問のエラーメッセージ:

psql: FATAL:  Ident authentication failed for user "postgres"

unixドメインソケットを使用する場合、Unixユーザーpostgresのみがデータベースユーザーpostgresとして接続する権限を持っているという事実に関連しています。これはpg_hba.confファイルで設定されます。

通常のユーザーとしてログインし、システムの管理者である場合にUbuntuで通常行うべきこと:

$ Sudo -u postgres psql
6
Daniel Vérité

UNIXソケットを介した接続のデフォルトが気に入らない場合は、環境変数PGHOSTを設定できます。私は持っています

export PGHOST="db"

~/.bashrcで、その名前でサーバーに接続します。さらに便利な環境変数は http://www.postgresql.org/docs/9.5/static/libpq-envars.html に文書化されています

12
Andrew