一、问题现象:

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扩展插件的安装。

KingbaseES数据库安装PostGIS扩展GEOSUnaryunionPrec错误的更多相关文章

  1. Linux安装KingbaseES数据库 Unsupported major.minor version错误处理

    Linux系统安装V008R006C007B0012版本KingbaseES数据库报错:Unsupported major.minor version 52.0 系统版本: [root@vm-10-3 ...

  2. 安装Stomp扩展时错误提示error: 'zend_class_entry' has no member named 'default_properties'

    在安装stomp扩展时, 有这样的提示 error: 'zend_class_entry' has no member named 'default_properties' 交待下安装上下文, sto ...

  3. Linux安装imagick扩展出现错误:configure: error: not found. Please provide a path to MagickWand-config or Wand-config program.

    在Linux(CentOS)上安装imagick扩展时,遇到如下错误: checking ImageMagick MagickWand API configuration program... che ...

  4. PostgreSQL 之 yum安装 postgis 插件

    版本说明: CentOS7.5 + PostgreSQL 10.5 参考资源: https://www.postgresql.org/download/linux/redhat/ http://dow ...

  5. docker安装postgres并启用postgis扩展

    镜像 查看所有镜像 docker images 可以直接拉取postgis镜像 docker pull postgis 也可以在已有镜像上安装postgres,再启用扩展: docker pull p ...

  6. CentOS7安装redis数据库及php-redis扩展

    redis 首先把redis安装到服务器中 1.wget http://download.redis.io/redis-stable.tar.gz 下载redis源码 2. tar xvzf redi ...

  7. PHP安装amqp扩展 出现未装librabbitmq错误

    这错误的原因是因为没有安装amqp的依赖包rabbitmq-c,需要先安装rabbitmq-c. 1.安装rabbitmq-c-0.7.1 没有安装就会提示上面的错误我选择的是最新版本0.7.1 wg ...

  8. Mysql数据库安装和配置

    http://blog.csdn.net/pipisorry/article/details/46773507 Mysql数据库安装和配置.mysql语法.特殊符号及正则表达式的使用.MySQL备份与 ...

  9. windows下安装MongoDB扩展和配置

    windows下安装MongoDB扩展和配置 1.下载mongoDB扩展,根据当前php版本进行下载 地址如下:http://pecl.php.net/package/mongo 我本地php版本是 ...

  10. linux下搭建lamp环境以及安装swoole扩展

    linux下搭建lamp环境以及安装swoole扩展   一.CentOS 6.5使用yum快速搭建LAMP环境 准备工作:先更新一下yum源  我安装的环境是:apache2.2.15+mysql5 ...

随机推荐

  1. iptables的mangle表

    mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由. 使用策略路由 对应的场景, 都是有多个网口, 常见的使用步骤 1. 创建路由表 ...

  2. Js中的逻辑运算符

    Js中的逻辑运算符 JavaScript中有三个逻辑运算符,&&与.||或.!非,虽然他们被称为逻辑运算符,但这些运算符却可以被应用于任意类型的值而不仅仅是布尔值,他们的结果也同样可以 ...

  3. Swoole从入门到入土(20)——WebSocket服务器[协程版本]

    本篇让我们先用一段示例代码开路: <?php Co\run(function () { $server = new Co\Http\Server('0.0.0.0', 9501, false); ...

  4. 免费接口API

    前言 我们经常在不同的应用中见到镶嵌的本地地理位置气象信息,一般配合定位使用,即先获取用户位置,然后通过用户的区域请求免费的天气接口,获取气象数据,json解析后展示. 一,常用的三个接口 我常用的接 ...

  5. EXPLAIN命令

    EXPLAIN命令   除了以SELECT开头的查询语句,其余的DELETE.INSERT.REPLACE以及UPDATE语句前边都可以加上EXPLAIN这个词儿,用来查看这些语句的执行计划   Ty ...

  6. 从图纸到BIM到数字孪生城市(元宇宙),易如反掌!

    当智能建模平台与虚幻引擎相遇时,它们又能碰撞出怎样的火花呢? 智能建模怎么玩? 以南昌某职业学院项目为例,这个项目总共有16栋楼,我们直接用智能建模平台"bim.zonst.com" ...

  7. Qt+QtWebApp开发笔记(二):http服务器日志系统介绍、添加日志系统至Demo测试

    前言   上一篇使用QtWebApp的基于Qt的轻量级http服务器实现了一个静态网页返回的Demo,网页服务器很重要的就是日志,因为在服务器类上并没有直接返回,所以,本篇先把日志加上.   Demo ...

  8. 4-request对象

    前端提交数据 必备知识点 前端form表单中action属性,不写默认是当前路由地址 前端form表单中的method属性,不写默认是GET请求 前端页面 templates\register.htm ...

  9. 教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群

    本文分享自华为云社区<使用 Keepalived 和 HAproxy 创建高可用 Kubernetes 集群>,作者:江晚正愁余. 高可用 Kubernetes 集群能够确保应用程序在运行 ...

  10. 【Azure 存储服务】使用PowerShell脚本创建存储账号(Storage Account)的共享访问签名(SASToken) : New-AzStorageContainerSASToken

    问题描述 使用PowerShell脚本如何来创建存储账号(Storage Account)的共享访问签名呢?查询到可以使用 New-AzStorageContainerSASToken 命令来生成Az ...