KingbaseES数据库安装PostGIS扩展GEOSUnaryunionPrec错误
一、问题现象:
KingbaseES V008R006C007B0012数据库集群安装PostGIS扩展插件报错。
create extension postgis;
ERROR: could not load iibrary "/opt/kingbase/cluster/kingbase/lib/postgis-3.so”:/opt/kingbase/cluster/kingbase/lib/postgis-3.so: undefined symbo1: GEOSUnaryunionPrec
二、适用版本:
KingbaseES所有版本。
三、排查过程(在集群所有节点执行):
1.使用ldd查询postgis-3.so库文件依赖是否有异常
ldd信息:
[kingbase@localhost lib]$ cd /opt/kingbase/cluster/kingbase/1ib/
[kingbase@localhost lib]$ ldd postgis-3.so
1inux-vdso.so.1(0x00007ffecb16a000)
libm.so.6 => /lib64/libm.so.6 (0x00007fc3426d1000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc34251e000)
libgeos_c.so.1=>/opt/kingbase/cluster/kingbase/lib/1ibgeos_c.so.1 (0x00007fc3422e8000)
libproj.so.13 =>/opt/kingbase/cluster/kingbase/lib/1ibproj.so.13 (0x00007fc34206c000)
libjson-c.so.2 /opt/kingbase/cluster/kingbase/lib/1ibjson-c.so.2 (0x00007fc341e60000)
libprotobuf-c.so.1 =>/opt7kingbase/cluster/kingbase/lib/1ibprotobuf-c.so.1 (0x00007fc341c55000)
libxml2.so.2 =>/opt/kingbase/cluster/kingbase/lib/1ibxm12.so.2 (0x00007fc341906000)
libz.so.1 => /1ib64/libz.so.1 (0x00007fc3418ec000)
libdl.so.2 =>/1ib64/libd1.so.2 (0x00007fc3418e7000)
libsfCGALd.so.1 =>/opt/kingbase/cluster/kingbase/lib/libsFCGALd.so.1 (0x00007fc33ee21000)
libacc_s.so.1 => /lib64/1ibacc s.so.1 (0x00007fc33ee08000)
libc.so.6 => /lib64/libc.so.6 (0x00007fc33ec47000)
/lib64/ld-1inux-x86-64.so.2 (0x00007fc342bf3000)
libgeos-3.9.1.so =>/opt/kingbase/cluster/kingbase/lib/1ibgeos-3.9.1.so(0x00007fc33e7de000)
libpthread.so.0 => /1ib64/libpthread.so.o (0xo0007fc33e7bd60o)
libCGAL.so.12 =>/opt/kingbase/cluster/kingbase/lib/libcGAL.so.12 (0x00007fc33e53e000)
libcgal Core.so.12 =>/opt/kingbase/cluster/kingbase/lib/libcGAL_core.so.12 (0x00007fc33e28a000)
libmpfr.so.6 => /opt/kingbase/cluster/kingbase/lib/libmpfr.so.6(0x00007fc33e010000)
libamp.so.10 => /opt/kingbase/cluster/kingbase/lib/libgmp.so.10 (0x00007fc33dd93000
经排查postgis-3.so库文件未发现异常。
2.KingbaseES数据库版本跟PostGIS版本不对应:
安装跟数据库不匹配的高版本PostGIS或者低版本的PostGIS也会导致类型的问题。
KingbaseES数据库版本:
KingbaseES V008R006C007B0012 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-46), 64-bit
PostGIS扩展插件版本:
postgis-3.1.2_X86_V008R006C007B0012.tar.gz
经确认数据库版本跟PostGIS扩展插件版本对应。
3.系统存在其他版本的geos:
KingbaseES数据库PostGIS依赖geos都在数据库lib目录:
使用以下命令检查:
--rpm 命令
# rpm -qa | grep geo
geolite2 country 20181002 2.ky10.noarch
geocode-glib-devel-3.26.1-4.ky10.x86_64
geoclue2-2.5.6-1.p01.ky10.X86 64
geos-devel-3.6.1-12.oe1.x86 64
geocode-glib-help-3.26.1-4.ky10.noar ch
geos-3.6.1-12.oe1.X86_64
geoclue2-devel-2.5. 6-1.p01.ky10.x86_64
geocode-glib-3.26.1-4.KY10.X86 64
geolite2-city-20181002-2.ky10.noarch
--whereis geos-config
# whereis geos-config
geos-config:/usr/bin/geos-config /usr/1ocal/bin/geos-config
/usr/bin/geos-config --version
3.6.1
geos-config --version
3.7.0
经确认,当前系统包括数据库自带geos总共有3个不同版本的geos。
四、解决方法:
通过第三步排查过程,基本确定此问题是由于系统存在多个版本的geos导致。
1.通过设置环境变量指定使用的geos版本(推荐):
单独设置kingbase用户环境变量LD_LIBRARY_PATH指定使用跟数据库PostGIS版本匹配的geos:
--在.bashrc或者.bash_profile,添加以下环境变量保存退出
export LD_LIBRARY_PATH=/opt/kingbase/cluster/kingbase/1ib
添加LD_LIBRARY_PATH环境变量后执行以下命令:
source .bash_profile
--然后登录数据库再次执行
--此时执行以下命令创建成功
create extension postgis;
至此问题解决。
2.卸载系统安装的其他版本geos(不推荐):
使用rpm或者对应系统的命令,将系统whereis geos-config查询出来的geos都卸载或者删除。
删除后再次登录数据库进行PostGIS扩展插件的安装。
KINGBASE研究院