9

显然,这是一个很难问的问题,因为尽管它很简单,但似乎没有人回答它。

我在 ubuntu 12.10 服务器(无 GUI)上运行 PostgreSQL。

我的目标——我的问题——是创建一个名为“mydb”的数据库和一个用户“admin”,这样我就可以从 shell 以普通用户的身份给出这个命令并连接到数据库:

$ psql -U 管理员 -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”数据库——也许拥有这种权限的人不需要?[在我写的时候,我注意到我可能应该撤销管理员的超级用户权限。]

我真正想知道的是如何从普通用户的 shell连接:

$ psql -U postgres
psql: FATAL:  Peer authentication failed for user "postgres"

我误解了关于运行 postgreSQL 的一些不成文的假设,但是几个小时的搜索、查看教程等并没有解决问题。如果有人说这已经得到了回答,我会非常高兴,尤其是如果已经回答了。我假设并希望答案很简单,并感谢您的帮助。

谢谢,格

4

2 回答 2

8

从错误消息看来,身份验证设置似乎没有正确设置。

除了数据库本身的设置之外,PostgreSQL 还使用一个配置文件 (pg_hba.conf) 来指定每个用户、主机和数据库可以使用哪些身份验证机制。您可以指定用户只能通过密码/md5 密码甚至“无需身份验证”进行连接

当前,您的配置可能对所有用户使用“Peer”身份验证,这仅意味着:仅当该用户是当前登录的用户时才允许该用户(例如,您的外壳用户也应称为“管理员”)。从您的问题来看,这不是您想要的,您可能想要使用密码或 md5 身份验证机制。

我认为这些页面将为您提供所需的答案:

http://web.archive.org/web/20131001194046/http://blog.deliciousrobots.com/2011/12/13/get-postgres-working-on-ubuntu-or-linux-mint/(存档版本)

官方文档:

http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html

修改pg_hba.conf文件后记得重新加载postgresql!

更新

我提到的原始博客文章现已离线,链接现在指向存档版本。感谢@O_the_Del 的报告。

于 2013-01-26T19:21:31.470 回答
5

在 Debian 上,PostgreSQL 默认在 localhost 上侦听,因此如果您在 pg_hba.conf 中有一个允许 TCP/IP 连接的规则,那么您可以使用 -h 参数来匹配该规则:

psql -U admin -h localhost mydb
于 2013-01-29T03:46:18.200 回答