我得到了错误:

FATAL: Peer authentication failed for user "postgres"

当我尝试让postgres与Rails一起工作时。

这是pg_hba.conf,我的数据库。Yml,以及完整跟踪的转储。

我在pg_hba中将身份验证更改为md5,并尝试了不同的方法,但似乎都不起作用。

我还尝试按照Rails 3.2创建一个新用户和数据库,FATAL: Peer authentication failed for user (PG::Error)

但是它们不会在pgadmin上显示,甚至当我运行sudo -u postgres psql -l时也不会显示。

知道我哪里错了吗?


当前回答

在连接中使用host=localhost。

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);

其他回答

sudo psql --host=localhost --dbname=database-name --username=postgres

这解决了我的问题

大多数解决方案建议编辑pg_hba.conf。

对于不想编辑配置文件的人,基本上只需要登录到postgres用户。如果您在Linux服务器上使用/,则使用此命令

sudo -i -u postgres

它将创建用户postgres,然后登录到它。现在再次尝试psql命令。

你也可以用下面的命令为postgres用户添加密码(你应该是root用户)

passwd postgres

这是可行的,因为根据PostgreSQL的文档,

对等的身份验证

对等体认证的工作原理是获取客户端的认证信息 来自内核的操作系统用户名,并使用它作为允许的 数据库用户名(可选用户名映射)。这个方法是 仅支持本地连接。

如果您有问题,您需要找到pg_hba.conf。命令如下:

查找/ -name 'pg_hba.conf' 2>/dev/null

然后修改配置文件:

Postgresql 9.3

Postgresql 9.4

下一步是:重新启动你的db实例:

Service postgresql-9.3 restart

如果您有任何问题,您需要重新设置密码:

修改用户密码为db_password

您只需要将METHOD设置为信任。

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

并重新加载postgres服务器。

# service postgresql-9.5 reload

修改pg_hba.conf不需要重启postgres服务器。重新加载。

许多其他答案与各种配置文件中的设置有关,与pg_hba.conf有关的答案确实适用,并且是100%正确的。但是,请确保您正在修改正确的配置文件。

正如其他人所提到的,配置文件的位置可以在主配置文件中使用各种设置来覆盖,也可以在命令行上使用-D选项提供主配置文件的路径。

您可以在psql会话中使用以下命令来显示正在读取配置文件的位置(假设您可以启动psql)。这只是一个故障排除步骤,可以帮助一些人:

select * from pg_settings where setting~'pgsql';  

您还应该确保postgres用户的主目录位于您预期的位置。我这样说是因为很容易忽略这一点,因为您的提示符将显示'~'而不是您的主目录的实际路径,这使得它不那么明显。许多安装默认postgres用户主目录为/var/lib/pgsql.

如果它没有被设置为它应该是什么,停止postgresql服务,并在以root身份登录时使用以下命令。同时确保postgres用户没有登录到另一个会话:

usermod -d /path/pgsql postgres

最后,通过输入echo $PGDATA来确保你的PGDATA变量设置正确,它应该输出类似于:

/path/pgsql/data

如果它没有设置,或者显示的内容与您期望的不同,请检查您的启动文件或RC文件,如.profile或.bash。rc -这将根据您的操作系统和shell而有很大的不同。一旦你为你的机器确定了正确的启动脚本,你可以插入以下内容:

export PGDATA=/path/pgsql/data

对于我的系统,我把它放在/etc/profile.d/profile.local.sh中,这样所有用户都可以访问它。

现在您应该能够像往常一样初始化数据库,所有的psql路径设置都应该是正确的!