psql: error: FATAL: Peer authentication failed for user “postgres”
引言:在 CentOS 8
完成 PostgresQL
的安装后初始化数据库后在命令行连接到 PostgresQL
数据库时, 出现的异常问题。
操作系统环境:
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)找到 PostgresQL
的 data
目录下的 pg_hba.conf
文件。一般情况下, PostgresQL
的默认 data
问价目录在 /var/lib/
目录下, 也可以使用以下命令找到对应位置:
sudo find / -name pg_hba.conf
输入命令 updatedb
更新以下数据库文件即可。
2)然后编辑 pg_hba.conf
文件, 由于 CentOS 8
默认是安装了 vim
的, 因此直接使用 vim
即可:
sudo vim pg_hba.conf
把本地的认证方式从 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
是登录的用户名, 这里我们登录的用户名是 postgres
。new_password
为修改后的密码。
5) 退出当前数据库(\q
命令), 重新编辑 pg_hba.conf
文件:
6)再次重新启动 PostgresQL
服务:
sudo systemctl restart postgresql-13.service
即可输入登录命令进行正常的认证登录。