PostGIS-2.0.4 Bug 一例? postgis-2.0.so: undefined symbol: GETSTRUCT

今天搭建一测试环境,需要安装 postgis , postgis 是我最不愿意安装的 PG 组件,没有之一,特别是 postgis 2.0 以后,安装 postgis 的同时需要安装很多其它组件,例如 GDAL, LibXML2, JSON-C 等。

今天安装的是 postgis-2.0.4, 关于安装请参考 PostgreSQL:PostGIS 2.0 安装。

环境信息

系统: CentOS release 5.4
数据库: PostgreSQL 9.3.4
PostGIS: 2.0.4
系统比较老,在编译安装过程中遇到了不少问题,有个问题如下:

创建 PostGIS 模块报错

1
2
3
4
5
6
pg93@host_db-> psql -h 127.0.0.1 db_lbs
psql (9.3.4)
Type "help" for help.

db_lbs=# create extension postgis;
ERROR: could not load library "/opt/pgsql9.3.4/lib/postgis-2.0.so": /opt/pgsql9.3.4/lib/postgis-2.0.so: undefined symbol: GETSTRUCT

备注: postgis 安装成功,但在通过 “create extension postgis” 加载组件时报以上错误,网上查了下说是 postgis 的一个 bug,解决方法如下:

解决过程

修改以下文件
vim /opt/soft_bak/postgis-2.0.4/postgis/geometry_estimate.c
在文件开始部分增加以下:

1
2
3
4
5
6
7
8
9
10
#include  "utils/rel.h"

#include "../postgis_config.h"

//add
#if POSTGIS_PGSQL_VERSION >= 93
#include "access/htup_details.h"
#endif

#include "liblwgeom.h"

备注:之后重新编译,以下是我的编译命令。

编译安装

1
2
3
# ./configure --with-pgconfig=/opt/pgsql9.3.4/bin/pg_config --with-projdir=/usr/local/pg_tool/proj --with-geosconfig=/usr/local/pg_tool/geos/bin/geos-config --with-gdalconfig=/usr/local/pg_tool/gdal/bin/gdal-config --with-jsondir=/usr/local/pg_tool/json
# make
# make install

验证

之后再次加载 postgis 组件正常

1
2
3
4
5
6
7
8
9
10
11
12
pg93@host_db-> psql -h 127.0.0.1 db_lbs
psql (9.3.4)
Type "help" for help.

db_lbs=# create extension postgis;
CREATE EXTENSION

db_lbs=# create extension postgis_topology;
CREATE EXTENSION

db_lbs=# CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION

参考

最后推荐和张文升共同编写的《PostgreSQL实战》,本书基于PostgreSQL 10 编写,共18章,重点介绍SQL高级特性、并行查询、分区表、物理复制、逻辑复制、备份恢复、高可用、性能优化、PostGIS等,涵盖大量实战用例!

购买链接:https://item.jd.com/12405774.html

PostgreSQL实战
感谢支持!
0%