Postgresql的密码验证失败

时间:2013-11-20 23:46:15

标签: ruby-on-rails postgresql

我正在创建一个Rails应用程序并使用Postgresql数据库。我创建了一些表和一个用户core,它是每个表的所有者。

postgres=# create user core with password 'n7zD5FG5';
CREATE ROLE
postgres=# create database core_apps_prod with owner core;
CREATE DATABASE
postgres=# create database core_apps_dev with owner core;
CREATE DATABASE
postgres=# create database core_apps_test with owner core;
CREATE DATABASE

我的database.yml文件:

development:
  adapter: postgresql
  database: core_apps_dev
  username: core
  password: n7zD5FG5
  host: localhost

但是,当我运行rake db:migrate时,我收到错误

rake aborted!
FATAL:  password authentication failed for user "core"

我也无法手动连接psqlpsql -U core -W -d core_apps_dev - 我收到同样的错误。

如何允许corelocalhost上连接到Postgresql?

SELECT * FROM pg_roles where rolname='core';的输出是:

 rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig |  oid  
---------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+-------
 core    | f        | t          | f             | f           | f            | t           | f              |           -1 | ********    |               |           | 16392

4 个答案:

答案 0 :(得分:0)

您需要在创建角色时为角色添加权限。要允许登录并使用rake db:create,请使用以下命令:

create role core with login createdb password 'n7zD5FG5';

要解决您的问题,请尝试更改角色以允许登录:

alter role core with login;

如果这不起作用,请查看登录是否永久有效:

alter role core valid until 'infinity';

有关角色的更多信息:http://www.postgresql.org/docs/8.2/static/sql-createrole.html

编辑:

安装postgres时我也必须这样做:

$ psql postgres -c 'CREATE EXTENSION "adminpack";'

答案 1 :(得分:0)

该问题原来是该端口的问题。 Postgresql Activerecord适配器defaults to port 5432,而我配置中的端口是端口5433。我的database.yml现在看起来像这样:

development:
  adapter: postgresql
  database: core_apps_dev
  username: core
  password: n7zD5FG5
  host: localhost
  port: 5433

答案 2 :(得分:-1)

新创建的用户可能缺少数据库权限。您可以为用户提供许多不同的权限。

假设您拥有psql的管理员帐户访问权限,请进入psql并运行

GRANT ALL PRIVILEGES ON DATABASE core_apps_dev to core;

答案 3 :(得分:-1)

你可以试试吗

alter role core with password "n7zD5FG5";