Ubuntu 22.04服务器无法运行psql命令求助
操作流程与问题现状
- 执行
sudo apt install postgresql-13(注:原命令中apy应为笔误)安装PostgreSQL 13; - 通过
sudo -i -u postgres成功切换至postgres用户,终端提示符显示postgres@IdeaPad:~$; - 尝试运行
psql或psql -h localhost -p 5432均报错; - 已确认PostgreSQL服务处于运行状态;
- 删除
postmaster.pid并重启服务后问题未解决; - 修改
/etc/postgresql/13/main/pg_hba.conf配置文件后问题仍存在; - 补充:执行
psql -U postgres -h localhost依旧报错。
排查与解决建议
获取具体报错信息
把报错的文本内容直接复制出来(比如connection refused、FATAL: password authentication failed等),不同的错误提示是定位问题的关键。检查端口监听状态
执行ss -tulpn | grep 5432,确认PostgreSQL是否在监听5432端口。如果没有监听记录,说明服务未正常启动或配置了错误的监听端口。查看服务启动日志
执行systemctl status postgresql@13-main.service,查看服务启动时的日志输出,里面会包含初始化失败、配置文件语法错误等关键信息。验证pg_hba.conf配置
打开/etc/postgresql/13/main/pg_hba.conf,确保针对本地TCP连接的配置正确,比如:host all all 127.0.0.1/32 scram-sha-256 host all all ::1/128 scram-sha-256修改后执行
sudo systemctl reload postgresql@13-main.service使配置生效。检查postgresql.conf的监听配置
打开/etc/postgresql/13/main/postgresql.conf,确认listen_addresses参数设置为'localhost'(仅本地连接)或'*'(允许远程连接),默认应为'localhost'。若设置错误会导致TCP连接失败,修改后需重启服务:sudo systemctl restart postgresql@13-main.service。尝试Unix Socket连接
切换至postgres用户后,直接执行psql -d postgres(不指定-h参数),使用Unix Socket连接。如果此方式成功,说明TCP连接的配置存在问题;如果仍失败,可能是数据库初始化异常或权限问题。确认PGDATA环境变量
切换至postgres用户后执行echo $PGDATA,确认输出为/var/lib/postgresql/13/main。若路径错误,会导致psql无法找到数据库实例。
内容的提问来源于stack exchange,提问作者Max

