postgresql - 如何让 psql 从 shell : $ psql -U admin -d mydb 在 ubuntu 中工作

标签 postgresql

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

我在 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://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 的报告。

关于postgresql - 如何让 psql 从 shell : $ psql -U admin -d mydb 在 ubuntu 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14540570/

相关文章:

django - 如何从 django/psycopg2 中清除递归查询的 postgres 临时表

python - 连接多个数据库时,是否需要多个 SQLAlchemy Metadata、Base 或 Session 对象?

postgresql - 检查 postgresql 中时态数据库的最小可变性

行之间的Postgresql差异

Django 多数据库在 heroku 上部署路由器

postgresql - PL/pgSQL 函数中的可选参数

sql - 如何查看数据库对象定义的注释?

sql - 如何将一列与另一列的条件相加?

sql - 如何查询关联不存在或全部具有非空值的记录?

postgresql - Postgres - 具有多个 where 子句的索引