postgis-2.0.so:未定义的符号:GETSTRUCT

dig*_*oal 10 postgis

当我使用pg_upgrade检查升级postgresql 9.0 beta2到postgresql 9.3 beta1.错误发生在下面:

uptest@db-172-16-3-33-> cat loadable_libraries.txt 
Could not load library "$libdir/postgis-2.0"
ERROR:  could not load library "/opt/pgsql9.3beta1/lib/postgis-2.0.so": /opt/pgsql9.3beta1/lib/postgis-2.0.so: undefined symbol: GETSTRUCT
Run Code Online (Sandbox Code Playgroud)

详细程序:

  1. 安装9.3
  2. initdb 9.3
  3. 安装如此(pgfincore,pg_stat_statements,postgis,不要安装schema sql)
  4. 校验

LD_LIBRARY_PATH是:

LD_LIBRARY_PATH=/opt/pgsql9.3beta1/lib:/opt/postgis-2.0.3-for9.3/lib:/opt/gdal-1.10.0/lib:/opt/geos-3.3.8/lib:/opt/json-c-git20130520/lib:/opt/proj-4.8.0/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib /opt/pgsql9.3beta1/bin/pg_upgrade -c -b /opt/pgsql9.0beta2/bin -B /opt/pgsql9.3beta1/bin -d /pgdata1099 -D /pgdata2099 -p 1099 -P 2099 -u postgres -v
Run Code Online (Sandbox Code Playgroud)

然后是错误:

Checking for presence of required libraries                 fatal

Your installation references loadable libraries that are missing from the
new installation.  You can add these libraries to the new installation,
or remove the functions using them from the old installation.  A list of
problem libraries is in the file:
    loadable_libraries.txt

Failure, exiting
Run Code Online (Sandbox Code Playgroud)

解决:

这是postgresql 9.3的postgis bug.并解决了它.

谢谢.

http://trac.osgeo.org/postgis/changeset/10321

vi /opt/soft_bak/postgis-2.0.3/postgis/geometry_estimate.c

//add
#if POSTGIS_PGSQL_VERSION >= 93
  #include "access/htup_details.h"
#endif
Run Code Online (Sandbox Code Playgroud)

然后gmake,gmake install

pg_upgrade现在通过了.

小智 4

这是从问题中引用的。(OP已编辑问题)

引用:

这是 postgresql 9.3 的一个 postgis 错误。并解决了它。

谢谢。

http://trac.osgeo.org/postgis/changeset/10321

vi /opt/soft_bak/postgis-2.0.3/postgis/geometry_estimate.c

//add
#if POSTGIS_PGSQL_VERSION >= 93
  #include "access/htup_details.h"
#endif
Run Code Online (Sandbox Code Playgroud)

进而gmakegmake install

do pg_upgrade 现在已经通过了。