Ubuntu 22.04.1上PostgreSQL 14.8登录异常:无法进入psql CLI
解决PostgreSQL连接及权限问题
1. 临时绕过目录权限直接进入psql
执行命令时指定postgres用户的登录环境,避免尝试访问你的个人家目录:
sudo -u postgres -i psql
-i参数会模拟postgres用户的登录状态,自动进入其系统家目录(通常是/var/lib/postgresql),直接避开权限拒绝的问题。
2. 修复peer认证失效问题
如果上述命令仍要求输入密码,说明pg_hba.conf的配置未生效或被其他规则覆盖:
- 打开pg_hba.conf配置文件(替换
<版本号>为实际安装的PostgreSQL版本,比如14、15):sudo nano /etc/postgresql/<版本号>/main/pg_hba.conf - 确保针对postgres用户的本地连接规则为
peer认证:
找到如下行,确认认证方式是peer而非md5或scram-sha-256:local all postgres peer - 重启PostgreSQL服务使配置生效:
重启后执行sudo systemctl restart postgresqlsudo -u postgres psql即可直接进入psql。
3. 创建带密码的用户与数据库
进入psql CLI后,执行以下SQL命令:
- 创建带密码的用户(替换
your_user和your_password为自定义内容):CREATE USER your_user WITH PASSWORD 'your_password'; - 创建数据库并指定所有者:
CREATE DATABASE your_db OWNER your_user; - 授予用户数据库全部权限(可选):
GRANT ALL PRIVILEGES ON DATABASE your_db TO your_user;
4. 目录权限拒绝的原因说明
Could not change directory to "/home/roland": Permission denied的本质是:
- 使用
sudo -u postgres切换用户后,psql默认会尝试进入当前终端的工作目录(即你的个人家目录/home/roland)。 - postgres作为系统专用用户,没有访问普通用户家目录的权限,因此触发权限拒绝错误。
- 用
-i参数切换到postgres的登录环境,会自动进入其有权限访问的系统家目录,从而解决该问题。
内容的提问来源于stack exchange,提问作者Roland
相关产品推荐
相关产品推荐

