执行psql postgres命令连接PostgreSQL时出现Connection refused错误求助
PostgreSQL连接拒绝(Connection refused)问题排查与解决
1. 确认PostgreSQL服务状态
- 检查服务是否运行:
- systemd系统(Ubuntu 16.04+/CentOS 7+):
systemctl status postgresql - SysVinit系统:
service postgresql status
- systemd系统(Ubuntu 16.04+/CentOS 7+):
- 未运行则启动服务:
- systemd:
sudo systemctl start postgresql - SysVinit:
sudo service postgresql start
- systemd:
- 可选:设置开机自启:
sudo systemctl enable postgresql
2. 验证Unix套接字路径
错误提示套接字路径为/tmp/.s.PGSQL.5432,按以下步骤检查:
- 查看路径是否存在:
ls -l /tmp/.s.PGSQL.5432 - 若不存在,打开PostgreSQL配置文件
postgresql.conf,找到unix_socket_directories参数确认实际套接字目录:- 配置文件位置:Debian/Ubuntu通常在
/var/lib/postgresql/<版本号>/main/postgresql.conf,RHEL/CentOS在/var/lib/pgsql/data/postgresql.conf - 修改后重启服务:
sudo systemctl restart postgresql
- 配置文件位置:Debian/Ubuntu通常在
- 连接时指定正确路径:
psql -h /var/run/postgresql postgres(替换为实际目录)
3. 检查监听与权限配置
- 确认
postgresql.conf中listen_addresses参数:- 本地连接可设为
localhost,需远程连接则设为*或具体IP,修改后重启服务
- 本地连接可设为
- 检查
pg_hba.conf本地连接规则,确保存在类似配置:
修改后重载配置:local all all peer # 或使用密码验证 local all all md5sudo systemctl reload postgresql
4. 修复文件权限
- 确保套接字目录权限正确:
chmod 1777 /tmp(设置sticky bit) - 确认套接字文件所属用户为
postgres:ls -l /tmp/.s.PGSQL.5432,若不是则调整:chown postgres:postgres /tmp/.s.PGSQL.5432
5. 排查端口占用情况
- 检查5432端口是否被其他进程占用:
sudo lsof -i :5432或sudo netstat -tulpn | grep 5432 - 若被占用,停止占用进程,或修改
postgresql.conf中的port参数更换端口,重启后用新端口连接:psql -p <新端口> postgres
内容的提问来源于stack exchange,提问作者Marcos Silva
相关产品推荐
相关产品推荐

