我知道有很多帖子都有贴心的消息。我希望所有人都阅读。并没有找到答案。有些人要求使用-h localhost
从local
中的host
跳到hba.conf
个规则。有人说要在trust
上设置local
...但我想要peer
身份验证,而不是TCP
而不是信任!
所以我在OS
和DB
上都有用户vao:
t=# \! who am i
vao pts/8 2016-11-11 12:23 (10.1.10.158)
t=# \du+ vao
List of roles
Role name | Attributes | Member of | Description
-----------+------------+-----------+-------------
vao | Superuser | {} |
然而当我尝试使用psql时出现错误:
$ psql t
psql: FATAL: role "vao" does not exist
根据docs
对等身份验证方法通过获取客户端来工作 来自内核的操作系统用户名并将其用作允许的 数据库用户名(带有可选的用户名映射)。这个方法是 仅在本地连接上受支持。
和
对等身份验证仅适用于提供的操作系统 getpeereid()函数,SO_PEERCRED套接字参数,或 类似机制。目前包括Linux,大多数BSD版本 包括OS X和Solaris。
所以我看看Debian是否支持getpeereid() 或SO_PEERCRED并拼命寻找解释。
在我重新评估之前,我明显缺乏环境设置。如果psql找不到用户,也许它找不到socket
?
所以我在unix_socket_directories
中查看postgresql.conf
并根据
psql手册:
- 主机=主机名 指定服务器所在机器的主机名 运行。如果值以斜杠开头,则将其用作 Unix域套接字的目录。
尝试psql t -h '/path/to/unix_socket_directories'
并瞧 - 我在那里
这不是我第一次踏上这个耙子! 所以我在这里发布 - 希望它会帮助某人。
答案 0 :(得分:1)
该错误具有误导性。
而不是
psql:致命:角色“xxx”不存在
应该是
psql:致命:套接字“yyy”不存在
或其他任何可能导致我们认为缺少Environment Variables
的想法像export PGHOST=/var/run/postgresql
那样的smth会治愈这种疾病