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服务文件添加环境变量
- 找到PostgreSQL 15的systemd服务文件,通常路径为:
若有自定义配置目录,也可在/usr/lib/systemd/system/postgresql-15.service/etc/systemd/system/postgresql-15.service.d/下新建配置文件(如env.conf)。 - 编辑文件,在
[Service]段添加环境变量配置:Environment="LD_LIBRARY_PATH=/usr/pgsql-15/lib:/usr/local/lib" - 重新加载systemd配置并重启服务:
systemctl daemon-reload systemctl restart postgresql-15 - 验证进程环境变量,确认
LD_LIBRARY_PATH已存在:cat /proc/$(pgrep postmaster)/environ | xargs -0 -n 1 echo - 再次执行
CREATE EXTENSION postgis;
方法二:通过ldconfig添加系统默认库搜索路径(推荐生产环境)
此方法无需依赖环境变量,直接将库路径加入系统动态链接缓存:
- 创建自定义库路径配置文件:
echo -e "/usr/pgsql-15/lib\n/usr/local/lib" > /etc/ld.so.conf.d/postgis.conf - 刷新动态链接库缓存:
ldconfig - 重启PostgreSQL服务:
systemctl restart postgresql-15 - 尝试创建PostGIS扩展。
方法三:手动启动PostgreSQL(仅用于验证)
该方法仅用于确认问题根源,不推荐生产环境使用:
- 停止systemd管理的PostgreSQL服务:
systemctl stop postgresql-15 - 切换到postgres用户:
su - postgres - 确保
LD_LIBRARY_PATH已设置,手动启动postmaster:/usr/pgsql-15/bin/postmaster -D /var/lib/pgsql/15/data/ & - 连接数据库执行
CREATE EXTENSION postgis;,若成功则验证了问题源于systemd环境变量继承问题。
内容的提问来源于stack exchange,提问作者Geek2.0
相关产品推荐
相关产品推荐

