Mac Big Sur启动PostgreSQL提示pg_notify目录不存在如何解决
问题根因
该报错与LaunchAgents路径下的plist符号链接状态无关,触发原因是指定的PostgreSQL数据目录/usr/local/var/postgres结构损坏,缺失了运行必需的pg_notify系统子目录——这个目录是PostgreSQL用来存储LISTEN/NOTIFY异步消息队列数据的核心目录,启动时校验不到就会直接终止进程,输出shutdown日志。
修复步骤
按风险从低到高依次尝试:
- 方案1:手动补建缺失目录并修正权限
Homebrew安装的PostgreSQL默认以当前登录用户身份运行,不需要切换到专用postgres用户,直接执行以下命令补目录、配权限即可:
执行完成后重新运行# 补建缺失的pg_notify目录 mkdir -p /usr/local/var/postgres/pg_notify # 配置目录权限为仅所有者可读可写可执行,符合PostgreSQL的安全校验要求 chmod 700 /usr/local/var/postgres/pg_notify # 修正目录所有者为当前用户 chown $(whoami):staff /usr/local/var/postgres/pg_notifypostgres -D /usr/local/var/postgres验证启动状态即可。 - 方案2:如果补建pg_notify后继续提示其他系统目录缺失,说明数据目录系统结构损坏范围较大,不要手动逐个创建目录,直接用Homebrew自带的修复命令自动补全所有系统结构:
该命令会自动匹配当前安装的PostgreSQL版本,补全所有缺失的系统目录、校验版本兼容性,不会删除已有的业务数据。# 先杀掉可能残留的PostgreSQL进程,避免文件锁冲突 pkill -u $(whoami) postgres # 执行PostgreSQL数据目录自动修复 brew postgresql-upgrade-database - 方案3:如果上述操作仍然启动失败,检查Big Sur系统对/usr/local路径的权限管控导致的全目录权限错乱,执行整体权限修复:
chmod -R 700 /usr/local/var/postgres chown -R $(whoami):staff /usr/local/var/postgres
操作提示:执行任何修复前如果有重要业务数据,可先执行
tar -zcf ~/postgres_backup.tar.gz /usr/local/var/postgres把整个数据目录打包备份,不要直接删除/usr/local/var/postgres目录,否则会造成不可逆的数据丢失。
内容的提问来源于stack exchange,提问作者godhar
相关产品推荐
相关产品推荐

