Mac High Sierra下Homebrew版PostgreSQL 9.6.3服务已加载但无法连接
解决Mac High Sierra下Homebrew PostgreSQL睡眠唤醒后无法连接的问题
这种睡眠唤醒后PostgreSQL明明显示服务已加载却连不上的情况,我在旧版Mac系统上碰到过好多次,大概率是launchctl服务状态异常或者Postgres进程僵死导致的,给你几个逐步排查修复的方法:
1. 先确认Postgres进程状态
首先得搞清楚Postgres到底有没有在运行,执行以下命令查看进程:
ps aux | grep postgres
如果输出里只有grep postgres这一行,说明主进程根本没起来;如果有多个postgres进程但状态显示Z(僵尸进程),那就得先杀掉这些僵死进程。
2. 强制重置launchctl服务
launchctl经常会出现“服务已加载”但实际进程没启动的假状态,这时候强制卸载再重新加载就能解决:
# 先尝试正常卸载 launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist # 如果提示卸载失败,加-f强制卸载 launchctl unload -f ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist # 重新加载服务 launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
3. 查看日志定位具体错误
如果上面的方法没用,就得看Postgres的日志找问题根源,Homebrew安装的Postgres日志默认路径是/usr/local/var/log/postgres.log,执行以下命令查看最新日志:
tail -20 /usr/local/var/log/postgres.log
常见的问题比如:
/tmp目录下的Postgres socket文件被系统清理了,这时候可以尝试用socket路径直接连接:psql -h /tmp- 数据库目录权限异常,这时候需要修复权限
4. 修复数据库目录权限
睡眠唤醒偶尔会导致文件系统权限错乱,执行以下命令确保数据库目录归当前用户所有:
sudo chown -R $(whoami) /usr/local/var/postgres
执行完后再重启Postgres服务试试。
5. 终极方案:重启系统
如果上面所有方法都不管用,大概率是launchctl的服务状态彻底乱了,重启Mac之后再重新加载Postgres服务,基本都能解决这种睡眠唤醒导致的异常。
内容的提问来源于stack exchange,提问作者skwidbreth
相关产品推荐
相关产品推荐

