heroku db:当我没有指定密码时,由于缺少密码而导致失败

Dav*_*ave 3 postgresql ubuntu ruby-on-rails heroku

当我执行heroku db:pull它找到我的本地dev db:

postgres://127.0.0.1/myapp_development?encoding=utf8
Run Code Online (Sandbox Code Playgroud)

一旦我确认,它失败了:

Sequel::DatabaseConnectionError -> PGError: fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)

我尝试使用指定的本地数据库运行pull,例如

heroku db:pull postgres://root:@localhost/db_name
Run Code Online (Sandbox Code Playgroud)

这给出了相同的无密码提供错误.

我以为我可能需要更改root:to myname:因为那是我授予超级用户权限的用户,当我设置postgres但是root:或myname:works时

我的database.yml具有用户名:和密码:为指定的所有数据库为空.

从myname @ ubuntu的命令行我可以输入psql myapp_development并连接正常并运行选择.

我在这里错过了什么?

它与我的pg_hba.conf设置有关吗?我看了看里面,它说:

# Database administrative login by UNIX sockets
local   all         postgres                          ident

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5
Run Code Online (Sandbox Code Playgroud)

应该"信任"在那里使用吗?如果是这样,如果我编辑该文件,我需要重新启动postgres吗?如果'trust'是必要的,那么当我的myname用户登录时,rails和psql命令行工具如何在没有密码的情况下工作?

谢谢!

Erw*_*ter 5

身份验证方法trust可能会成功,但正如您无疑意识到的那样,这并不安全.
编辑后pg_hba.conf,您不必重新启动.A reload就够了(引用手册):

pg_hba.conf在启动时以及主服务器进程收到SIGHUP信号时读取该文件.如果在活动系统上编辑文件,则需要向postmaster发送信号(使用pg_ctl重新加载或 kill -HUP)以使其重新读取文件.

pg_ctl reload
Run Code Online (Sandbox Code Playgroud)

请参阅精细手册.您可能需要8.3版本的手册.heroku上的共享数据库目前在PostgreSQL 8.3上运行.(另外,我怀疑你有权访问heroku上的pg_ctl.)

请注意这一点:

如果没有为用户设置密码,则存储的密码为空,并且该用户的密码验证将始终失败.

强调我的.您可以在本地登录,因为auth-methods identpeer允许.但为了您的目的,您可能需要密码!

  • 先生,你是一位绅士和学者.关键点是关于空密码的引用意味着用户的身份验证始终失败.我超级用户的一个ALTER后来给了他一个密码,几分钟后我在本地浏览我从heroku新删的数据库.谢谢. (4认同)
  • @Dave:我向你的客气话低头,分享你的喜悦.:) (4认同)