psql: error: FATAL: Peer authentication failed for user “postgres“

psql: error: FATAL: Peer authentication failed for user “postgres”

引言:在 CentOS 8 完成 PostgresQL 的安装后初始化数据库后在命令行连接到 PostgresQL 数据库时, 出现的异常问题。

操作系统环境:psql: error: FATAL: Peer authentication failed for user “postgres“_第1张图片
PostgresQL 版本:
在这里插入图片描述
连接命令:

psql -U postgres

出现的问题:

psql: error: FATAL:  Peer authentication failed for user "postgres"

原因:安装完 PostgresQL 后, PostgresQL 连接时的默认认证方式为 peer。官方的解释:
 The peer authentication method works by obtaining the client’s operating system user name from the kernel and using it as the allowed database user name (with optional user name mapping). This method is only supported on local connections.
 大概意思就是使用 peer 方式的认证方式, PostgresQL 会从操作系统内核中获取当前的用户名并且作为允许连接的用户名进行认证,这种方式仅仅适用于本地连接。

由于我们这里的登录名并不是对应的用户名, 因此出现了以上认证失败的信息。

解决方案:
修改本地连接登录的认证方式:
1)找到 PostgresQLdata 目录下的 pg_hba.conf 文件。一般情况下, PostgresQL 的默认 data 问价目录在 /var/lib/ 目录下, 也可以使用以下命令找到对应位置:

sudo locate pg_hba.conf

 如果使用 locate 命令时出现以下问题:

locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory

 输入命令 updatedb 更新以下数据库文件即可。
2)然后编辑 pg_hba.conf 文件, 由于 CentOS 8 默认是安装了 vim 的, 因此直接使用 vim 即可:

sudo vim pg_hba.conf

psql: error: FATAL: Peer authentication failed for user “postgres“_第2张图片
把本地的认证方式从 peer 改为 trust

3)然后再重新启动 PostgresQL 服务:

sudo systemctl restart postgresql-13.service

4)再次输入登录命令:

psql -U postgres

这次可以直接登录进入 postgres 数据库,修改对应的用户密码:

ALTER USER 'user_name' WITH PASSWORD 'new_password';

这里的 user_name 是登录的用户名, 这里我们登录的用户名是 postgresnew_password 为修改后的密码。

5) 退出当前数据库(\q 命令), 重新编辑 pg_hba.conf 文件:
psql: error: FATAL: Peer authentication failed for user “postgres“_第3张图片
6)再次重新启动 PostgresQL 服务:

sudo systemctl restart postgresql-13.service 

即可输入登录命令进行正常的认证登录。

你可能感兴趣的:(postgresql,数据库)