我有以下情况:
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 域套接字的机器上的本地主机。
参考: http://www.postgresql.org/docs/current/static/app-psql.html#R2-APP-PSQL-CON
为什么如果不指定主机我就无法登录,是否有某些配置文件需要进行更改才能按照psql
文档中所述进行操作?
答案1
如果你不喜欢默认通过 unix 套接字连接,你可以设置环境变量PGHOST
。我有
export PGHOST="db"
在我的 中~/.bashrc
,连接到具有该名称的服务器。还有一些方便的环境变量记录在http://www.postgresql.org/docs/9.5/static/libpq-envars.html
答案2
事实上,它确实按照文档所述运行。
当省略主机名时,psql
连接到编译路径的 Unix 域套接字。该部分在您的情况下有效,否则它将输出与问题显示的不同的错误消息。
问题中的错误信息:
psql: FATAL: Ident authentication failed for user "postgres"
与以下事实有关:在使用 Unix 域套接字时,只有 Unix 用户 postgres 才有权以数据库用户 postgres 的身份进行连接。这是在文件中配置的pg_hba.conf
。
当您以普通用户身份登录但作为系统管理员时,您通常应该在 Ubuntu 中执行以下操作:
$ sudo -u postgres psql