You need to enable JavaScript to run this app. macOS 10.15环境下启动EDB版PostgreSQL 9.5报libpq.5.dylib加载错误咨询
优惠活动
大模型
产品
解决方案
定价
更多

macOS 10.15环境下启动EDB版PostgreSQL 9.5报libpq.5.dylib加载错误咨询

问题核心根因

这个报错是macOS 10.15引入的硬化运行时(Hardened Runtime)安全机制与PostgreSQL 9.5版本EDB安装包的兼容冲突,对应报错信息的直接触发点有两个:

  • 旧版本PG的二进制、动态库未适配新系统的代码签名校验规则,系统拦截了动态库的内存映射(对应报错里的code signing blocked mmap()提示)
  • 硬化运行时规则禁止签名程序通过相对路径加载动态库,同时跨目录软连接引用会触发系统文件校验失败(对应报错里的file system relative paths not allowed in hardened programs、stat() failed with errno=1提示)
分步排障修复步骤
  • 第一步:移除文件隔离属性,解除系统的隔离拦截
    macOS会给安装包解压的文件自动添加隔离标记,会进一步放大签名校验的拦截规则,执行递归移除命令:
    sudo xattr -r -d com.apple.quarantine /Library/PostgreSQL/9.5
  • 第二步:为PG程序补做本地adhoc代码签名
    不需要付费苹果开发者证书,本地用临时签名覆盖原有无效的旧签名,让系统允许程序映射动态库:
    sudo codesign --force --deep --sign - /Library/PostgreSQL/9.5/bin/pg_ctl
    sudo codesign --force --deep --sign - /Library/PostgreSQL/9.5/bin/postgres
    sudo codesign --force --deep --sign - /Library/PostgreSQL/9.5/bin/psql
    sudo codesign --force --deep --sign - /Library/PostgreSQL/9.5/lib/*.dylib
    sudo codesign --force --deep --sign - /Library/PostgreSQL/9.5/lib/postgresql/*.so
    
  • 第三步:修正动态库的相对路径引用为绝对路径
    系统硬化规则不允许相对路径加载动态库,需要把pg_ctl等可执行文件内部对libpq的相对引用,修改为PG安装目录内的绝对路径,同时避开软连接跳转的问题:
    先确认原有路径引用:
    otool -L /Library/PostgreSQL/9.5/bin/pg_ctl
    执行路径替换命令,把相对路径@loader_path/../lib/libpq.5.dylib替换为安装目录下的真实文件路径:
    sudo install_name_tool -change @loader_path/../lib/libpq.5.dylib /Library/PostgreSQL/9.5/lib/libpq.5.8.dylib /Library/PostgreSQL/9.5/bin/pg_ctl
    sudo install_name_tool -change @loader_path/../lib/libpq.5.dylib /Library/PostgreSQL/9.5/lib/libpq.5.8.dylib /Library/PostgreSQL/9.5/bin/postgres
    sudo install_name_tool -change @loader_path/../lib/libpq.5.dylib /Library/PostgreSQL/9.5/lib/libpq.5.8.dylib /Library/PostgreSQL/9.5/bin/psql
    
    这里直接指向真实的libpq.5.8.dylib实体文件,而不是软连接,就能解决软连接跳转带来的stat校验失败问题。
  • 第四步:修正目录权限
    PG服务默认以daemon用户身份运行,需要保证安装目录下data文件夹的归属权限正确,避免启动时的权限拦截:
    sudo chown -R daemon:daemon /Library/PostgreSQL/9.5/data
  • 第五步:验证启动
    重新执行启动命令即可正常运行:
    cd /Library/PostgreSQL/9.5/bin
    sudo ./pg_ctl -D /Library/PostgreSQL/9.5/data start
    
注意事项
  • 不要依赖/usr/local/lib下指向PG目录的libpq软连接,硬化运行时的程序不允许跨非信任目录加载动态库,所有依赖引用必须限定在PG自身的安装目录范围内
  • 后续如果系统升级,需要重新执行一遍签名命令,因为系统安全策略升级后可能会重置本地签名的信任规则

内容的提问来源于stack exchange,提问作者Pychong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 15:15:11