创建扩展 postgis 失败,原因为 /usr/lib/libgdal.so.1:未定义符号:sqlite3_column_table

创建扩展 postgis 失败,原因为 /usr/lib/libgdal.so.1:未定义符号:sqlite3_column_table

问题:

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.*文件,解决问题

相关内容