You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 7创建PostGIS 3.2扩展失败,提示无法加载libgeos_c.so.1

解决PostGIS扩展创建失败:libgeos_c.so.1找不到的问题

问题核心

你在shell中设置的LD_LIBRARY_PATH属于用户环境变量,但通过systemd启动的PostgreSQL(postmaster)进程不会继承该变量,导致加载postgis-3.so时找不到依赖库libgeos_c.so.1。

解决方法

方法一:修改systemd服务文件添加环境变量

  1. 找到PostgreSQL 15的systemd服务文件,通常路径为:
    /usr/lib/systemd/system/postgresql-15.service
    
    若有自定义配置目录,也可在/etc/systemd/system/postgresql-15.service.d/下新建配置文件(如env.conf)。
  2. 编辑文件,在[Service]段添加环境变量配置:
    Environment="LD_LIBRARY_PATH=/usr/pgsql-15/lib:/usr/local/lib"
    
  3. 重新加载systemd配置并重启服务:
    systemctl daemon-reload
    systemctl restart postgresql-15
    
  4. 验证进程环境变量,确认LD_LIBRARY_PATH已存在:
    cat /proc/$(pgrep postmaster)/environ | xargs -0 -n 1 echo
    
  5. 再次执行CREATE EXTENSION postgis;

方法二:通过ldconfig添加系统默认库搜索路径(推荐生产环境)

此方法无需依赖环境变量,直接将库路径加入系统动态链接缓存:

  1. 创建自定义库路径配置文件:
    echo -e "/usr/pgsql-15/lib\n/usr/local/lib" > /etc/ld.so.conf.d/postgis.conf
    
  2. 刷新动态链接库缓存:
    ldconfig
    
  3. 重启PostgreSQL服务:
    systemctl restart postgresql-15
    
  4. 尝试创建PostGIS扩展。

方法三:手动启动PostgreSQL(仅用于验证)

该方法仅用于确认问题根源,不推荐生产环境使用:

  1. 停止systemd管理的PostgreSQL服务:
    systemctl stop postgresql-15
    
  2. 切换到postgres用户:
    su - postgres
    
  3. 确保LD_LIBRARY_PATH已设置,手动启动postmaster:
    /usr/pgsql-15/bin/postmaster -D /var/lib/pgsql/15/data/ &
    
  4. 连接数据库执行CREATE EXTENSION postgis;,若成功则验证了问题源于systemd环境变量继承问题。

内容的提问来源于stack exchange,提问作者Geek2.0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:13:20