导入OpenStreetMap至PostgreSQL时执行CREATE EXTENSION postgis报错求助
解决PostGIS扩展安装时的SQLite符号缺失错误
这个错误的核心原因很明确:你的系统中GDAL库依赖的SQLite版本过低,或者存在多个SQLite版本冲突,导致libgdal.so.1无法找到sqlite3_column_table_name这个符号——这个函数是SQLite 3.16.0及以上版本才引入的特性。
下面是一步步的解决办法:
1. 先确认当前SQLite版本
首先运行命令检查你的SQLite版本:
sqlite3 --version
如果输出的版本号低于3.16.0,那升级SQLite就是首要任务。
2. 升级SQLite并修复依赖
根据你的操作系统类型选择对应的操作:
对于Debian/Ubuntu系统
- 先更新系统包源:
sudo apt update - 升级SQLite及其开发库:
sudo apt install --only-upgrade sqlite3 libsqlite3-dev - 重新安装PostGIS以确保它链接到新的依赖库:
sudo apt install --reinstall postgis postgresql-9.5-postgis-2.2
对于RHEL/CentOS系统
默认系统源的SQLite版本通常偏旧,需要借助第三方源:
- 先安装EPEL源:
sudo yum install epel-release - 升级SQLite:
sudo yum update sqlite sqlite-devel - 重新安装适配PostgreSQL 9.5的PostGIS包:
sudo yum reinstall postgis2_95
(注:包名可能因系统版本略有差异,若找不到可以用yum search postgis查找对应版本的包)
3. 手动编译场景的额外处理
如果你是手动编译的GDAL或PostGIS,需要确保编译时链接的是新版本的SQLite:
- 重新编译GDAL,指定新版本SQLite的路径:
./configure --with-sqlite=/path/to/your/new/sqlite make && sudo make install - 之后重新编译安装PostGIS,确保它能调用到更新后的GDAL和SQLite库。
4. 验证库依赖并重启服务
- 检查GDAL链接的SQLite库是否正确:
确认输出的路径指向的是你刚升级的新版本SQLite库。ldd /usr/lib/libgdal.so.1 | grep sqlite - 最后重启PostgreSQL服务,让新的依赖生效:
之后再尝试执行sudo service postgresql restartCREATE EXTENSION postgis;应该就能成功了。
内容的提问来源于stack exchange,提问作者Maher Ben Taleb Ali
相关产品推荐
相关产品推荐

