rake db:创建失败,postgresql 8.4的身份validation问题

首先,请原谅我的完全无声。 我真的试图找到一个解决方案,但现在我陷入困境,完全无能为力。

我正在尝试在远程服务器上部署rails 3应用程序; 在我的本地VM上开发时,没有问题。 但现在,当我试图跑

rake db:create 

它失败了,有错误(这里翻译,因为我是法国人):

 FATAL : password authentication failed for user <> 

这是我的database.yml:

 login: &login adapter: postgresql username: mylogin password: mypassword host: localhost port: 5432 encoding: UTF8 development: <<: *login database: somesite_development test: <<: *login database: somesite_test production: <<: *login database: somesite_production 

使用命令行工具“createuser”在postgre-side创建了用户“mylogin”。 它被授权创建dbs。 postgresql.conf配置服务器监听localhost。 我用pg_hba.conf尝试了很多东西,没有用 – 无论在127.0.0.1上用户“mylogin”使用的方法(ident,密码,md5),身份validation都失败了 – 尽管我从未遇到过连接/创建dbs的问题PSQL。

任何线索?

编辑:好的,发现我是多么令人难以置信的愚蠢…我的用户的密码根本没有设置! 我想我忘记了分号了

ALTER USER xxxx WITH PASSWORD xxxx;

…我通过请求“SELECT * FROM pg_shadow;”看到了这一点。 – 密码字段为空。 由于这个愚蠢的错误,我浪费了三天的生命……

我也被困在这个问题很长一段时间了,并且去了各种各样的链接(包括这篇文章中提供的链接)试图找到答案,但无济于事。 但是,解决方案非常简单。 虽然许多其他答案都在正确的轨道上,但这里是解决问题的确切步骤:

  1. 在您选择的文本编辑器中打开您的pg_hba.conf文件。 (它位于/ etc / postgresql // main)

  2. 导航到以下行:

    #“local”仅适用于Unix域套接字连接

并粘贴在它下面:

  local all all trust 

这将信任所有尝试连接到本地计算机上的psql服务器的unix用户。 (有关列function的更多信息,请阅读页面顶部的文档)

  1. 保存pg_hba.conf文件并退出文本编辑器。

  2. 运行以下命令重新启动Postgresql服务器:

    service postgresql restart

  3. 现在尝试通过运行以下命令启动psql服务器:

    psql -d -U(或简称“psql”)

  4. 你应该能够毫无问题地登录。

*注意:所有这些都假设您有一个有效的psql用户名用于登录。如果您没有按照以下链接设置一个:

设置用户: http : //erikonrails.snowedin.net/?p = 274

确保你有一个有效的postgres用户: http : //archives.postgresql.org/pgsql-novice/2002-08/msg00072.php

列出所有现有的psql用户:如果您正在寻找“LIST USERS”或“DISPLAY USERS”命令,请尝试:

“select * from pg_user;” (登录psql时)

祝好运!

好吧,发现我是多么令人难以置信的愚蠢…我的用户的密码根本没有设置! 我想我忘记了分号了

 ALTER USER xxxx WITH PASSWORD xxxx ; 

…我通过请求“SELECT * FROM pg_shadow;”看到了这一点。 – 密码字段为空。 由于这个愚蠢的错误,我浪费了三天的生命……

我有同样的问题。 在我的情况下,这是因为在我的database.yml文件中,用户名以大写字母开头,但在数据库中它全是小写的。

解决方案:从postgres命令行创建用户时,它会将所有字母转换为小写。 对于使用大写字母,必须使用双引号 。

例:

create user AlbertEinstein; result = alberteinstein

VS

create user "AlbertEinstein"; result = AlbertEinstein

以下是一些适合您的简明说明

http://www.cyberciti.biz/faq/psql-fatal-ident-authentication-failed-for-user/

基本上,您需要将localhost的身份validation方法设置为“trust”。

您需要在postgresql中为“myuser”提供“可以创建数据库对象”的权限。

在pgadmin中,它看起来像这样:

在此处输入图像描述

在调用rake db:create之后,您可以取消此权限。

在我的例子中,我发现pg_hba.conf文件中的后续host权限规则行已经覆盖了早期的local行。 我正确配置local线路以使用md5身份validation,但host线路设置为ident ,我将其更改为md5

正如其他人在此强调的那样,请注意使用trust是一种不安全的方法,因此您不应在任何生产方式部署中使用它。