关于postgresql:我怎样才能让psql在shell中运行ubuntu:$ psql -U admin -d mydb

How can I get psql to work in ubuntu from shell: $ psql -U admin -d mydb

显然这是一个非常难以提出的问题,因为很简单,似乎没有人回答过这个问题。

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

我的目标 - 我的问题 - 是创建一个名为"mydb"的数据库和一个用户"admin",以便我可以从shell中以普通用户身份提供此命令并连接到数据库:

$ psql -U admin -d mydb

但我无法在任何地方找到答案。

我可以通过su'ing并运行psql命令以用户postgres身份登录:

1
2
3
4
5
6
$ sudo su -m postgres
postgres@baseubu1210dev:~$ psql
psql (9.1.7)
TYPE"help" FOR help.

postgres=#

我已经想出如何创建一个名为"mydb"的数据库和一个用户"admin",以便:

1
2
3
4
5
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连接:

1
2
$ psql -U postgres
psql: FATAL:  Peer authentication failed FOR USER"postgres"

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

谢谢,
通用电器


从错误消息中,似乎未正确设置身份验证设置。

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

目前,您的配置可能对所有用户使用"对等"身份验证,这仅表示:仅允许该用户(如果它是当前登录的用户)(例如,您的shell用户也应称为"admin")。从您的问题来看,这不是您想要的,您可能希望使用密码或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报道。


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

1
psql -U admin -h localhost mydb