当我创建一个新用户,但它不能登录数据库。 我是这样做的:

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

然后创建一个数据库:

postgres@Aspire:/home/XXX$ createdb -O dev test_development

之后,我尝试psql -U dev -W test_development登录,但得到错误:

psql: FATAL:  Peer authentication failed for user "dev"

我试图解决这个问题,但失败了。


当前回答

我只需要添加-h localhost

其他回答

我只需要添加-h localhost

虽然@flaviodesousa的答案可以工作,但它也强制所有用户(其他所有人)输入密码。

有时对其他人保持对等身份验证是有意义的,但对服务用户例外。在这种情况下,你会想要在pg_hba.conf中添加一行,看起来像这样:

local   all             some_batch_user                         md5

我建议你在注释标题行下面添加这一行:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             some_batch_user                         md5

重启PostgreSQL需要使用

sudo service postgresql restart

如果你使用的是9.3,你的pg_hba.conf很可能是:

/etc/postgresql/9.3/main/pg_hba.conf

最简单的解决方法:

CREATE USER dev WITH PASSWORD 'dev';
CREATE DATABASE test_development;
GRANT ALL PRIVILEGES ON DATABASE test_development to dev;
ALTER ROLE dev CREATEROLE CREATEDB;

在我的例子中,我使用了不同的端口。默认为5432。我用的是5433。这招对我很管用:

$ psql -f update_table.sql -d db_name -U db_user_name -h 127.0.0.1 -p 5433

对等身份验证意味着postgres向操作系统询问您的登录名并使用此名进行身份验证。在postgres上使用对等身份验证以“dev”用户登录时,必须同时是操作系统上的“dev”用户。

您可以在Postgresql文档中找到身份验证方法的详细信息。

提示:如果没有任何身份验证方法,请断开服务器与网络的连接,并为“localhost”使用方法“trust”(并在启用方法“trust”时再次检查您的服务器是否无法通过网络访问)。