CREATE EXTENSION postgis使用/usr/lib/libgdal.so.1失败:undefined symbol: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)

如果想法如何进一步debugging,我全力以赴。

好的,终于解决了这个问题。

根本原因

Postgres没有权限访问libsqlite3.so

debugging

错误是指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软件包,它工作。