问题:
postgres=# CREATE EXTENSION postgis;
LOG: statement: CREATE EXTENSION postgis;
ERROR: could not load library "/usr/lib/postgresql/9.5/lib/rtpostgis-2.3.so": /usr/lib/libgdal.so.1: undefined symbol: sqlite3_column_table_name`
我做了什么:
- 添加了 Postgres 官方 PPA -
http://apt.postgresql.org/pub/repos/apt xenial-pgdg/main
- 已安装 Postgis -
sudo apt-get install postgresql-9.5-postgis-2.3
- 我还卸载了
libgdal
它的依赖项(sudo apt-get remove --purge libgdal1i
),然后postgis
按照上述方法重新安装。仍然是同样的错误。 - 我在 VirtualBox 中安装了干净的 Ubuntu,它安装并正常运行。
版本:
- Ubuntu——Ubuntu 16.04.3 LTS
- Postgres - 9.5.9-1.pgdg16.04+1
- Postgis-2.3.3+dfsg-1.pgdg16.04+1
- Libgdal - 1.11.3+dfsg-3build2 (libgdal1i)
如果有想法的话我会想尽一切办法进一步调试这个问题。
答案1
OK,终于解决问题了。
根本原因
Postgres 无权访问libsqlite3.so
。
调试
错误是指libgdal.so.1
存在问题并且与有关sqlite3
,因此检查了依赖项:
~ ldd /usr/lib/libgdal.so.1 | grep "sql"
libmysqlclient.so.20 => /usr/lib/x86_64-linux-gnu/libmysqlclient.so.20 (0x00007fc80cd65000)
libsqlite3.so.0 => /usr/local/lib/libsqlite3.so.0 (0x00007fc80825e000)
有趣的是,所有依赖项都来自/usr/lib/...
,但libsqlite3.so.0
来自/usr/local/lib
。因此,人们不禁怀疑 Postgres 是否无法访问/usr/local/lib
并导致问题?
看起来,官方libsqlite
不应该安装在/usr/local/lib
,但/usr/lib
实际上它已经存在了。删除该/usr/local/lib
版本并重新安装整个 postgis 包,它就可以正常工作了。
答案2
删除/usr/local/lib/libsqlite3.so.0.*文件,解决问题