显然这是一个很难问的问题,因为尽管很简单,但似乎没有人回答过。
我在 ubuntu 12.10 服务器(无 GUI)上运行 PostgreSQL。
我的目标 - 我的问题 - 是创建一个名为“mydb”的数据库和一个用户“admin”,这样我就可以作为普通用户从 shell 发出此命令并连接到数据库:
$ psql -U admin -d mydb
但是我在任何地方都找不到这个问题的答案。
我可以通过 su'ing 并运行 psql 命令以用户 postgres 登录:
$ sudo su -m postgres
postgres@baseubu1210dev:~$ psql
psql (9.1.7)
Type "help" for help.
postgres=#
我已经弄清楚如何创建一个名为“mydb”的数据库和一个用户“admin”,这样:
postgres=# \du
Role name | List of roles Attributes | Member of
-----------+------------------------------------------------
admin | Superuser, Create role, Create DB | {}
postgres | Superuser, Create role, Create DB, Replication | {}
我没有想出如何确保用户“admin”可以连接到“mydb”数据库——也许拥有这种特权的人不需要这样做? [在我撰写本文时,我注意到我可能应该撤销管理员的 super 用户权限。]
我真正想知道的是如何从普通用户的 shell 进行连接:
$ psql -U postgres
psql: FATAL: Peer authentication failed for user "postgres"
肯定有关于运行 postgreSQL 的不成文假设我误解了,但是几个小时的搜索、查看教程等并没有解决问题。如果有人说这个问题已经得到解答,我会非常高兴,尤其是如果已经得到解答的话。我假设并希望答案很简单,感谢您的帮助。
谢谢, 格
最佳答案
从错误消息来看,似乎身份验证设置没有正确设置。
除了数据库本身的设置外,PostgreSQL 还使用配置文件 (pg_hba.conf) 指定每个用户、主机和数据库可以使用的身份验证机制。您可以指定用户只能通过 password/md5 密码甚至“不需要身份验证”进行连接
当前您的配置可能对所有用户使用“Peer”身份验证,这仅意味着:仅允许该用户当前登录的用户(例如,您的 shell 用户也应称为“admin”)。根据您的问题,这不是您想要的,您可能需要使用密码或 md5 身份验证机制。
我认为这些页面将为您提供所需的答案:
官方文档:
http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html
修改pg_hba.conf文件后记得重新加载postgresql!
更新
我引用的原始博文现已下线,链接现在指向存档版本。感谢@O_the_Del 的报告。
关于postgresql - 如何让 psql 从 shell : $ psql -U admin -d mydb 在 ubuntu 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540570/