opengauss6.0.0集成postgis问题,请大佬赐教!!!!!!!!

你好,按咱们文档操作到 此步骤之后,会有很多各种类型的报错,而非单纯的是缺少头文件,而且处理完当前报错之后,编译会出现新的其他报错,编译一直无法通过,是否有最新的继承文档呢?

只是简单列举了几个,解决完当前会有其他报错,源源不尽。。。

答案内容由AI生成,仅供参考:

:white_check_mark: 总结

项目 结论
是否支持 openGauss 6.0.0 + PostGIS 2.4.2 :cross_mark: 不支持,因内核接口变更导致编译失败
是否有替代方案 :white_check_mark: 使用 postgis-xc 分支,或降级 openGauss 版本
是否有最新集成文档 :warning: 现有文档过时,建议参考源码和社区 Issue
建议操作 使用 postgis-xc 源码 + GCC 7.3 + 手动补丁

:bell: 强烈建议:在 openGauss 6.0.0 上集成 PostGIS 前,先在测试环境验证 postgis-xc 的兼容性,或等待社区发布正式支持版本。

点击此处查看详细分析解答

openGauss 6.0.0 集成 PostGIS 编译问题分析与解决方案

根据您提供的详细信息,openGauss 6.0.0 集成 PostGIS 2.4.2 的确存在兼容性问题,导致编译无法顺利通过。目前的文档和方法可能已不适用于新版本的 openGauss,以下是综合分析与建议。


:firecracker: 一、核心问题:内核接口变更导致编译失败

1. 根本原因

  • openGauss 的服务端代码在近期发生了内核接口变更,这直接影响了 PostGIS 插件的编译。
  • 正如社区开发者 douxin 在问题单中明确指出:

    postgis+openGauss server 最新代码因为内核接口变更,导致安装失败。”

  • 该问题已被记录在社区的 Bug Tracker 中。

2. 编译报错的根源分析

您在图片中提供的编译错误包含多个层面的问题,归结如下:

错误类型 具体表现 根本原因
类型定义缺失 未知的类型名 ‘bool’ openGauss 内核头文件中 bool 定义方式与 PostgreSQL 原生不同,PostGIS 未适配
函数声明不兼容 expected ‘;’, ‘,’ or ‘)’ before ‘=’ token 函数默认参数语法在 openGauss 的 port.h 中被禁用或修改
头文件缺失 致命错误:cxxabi.h:没有那个文件或目录 编译环境缺少 C++ 运行时支持库,或未正确设置编译器
函数未定义 ‘lwfree’在此作用域中尚未声明 lwfree 在 openGauss 中可能被替换为 pfree,但 PostGIS 仍调用旧函数名

这表明 PostGIS 源码未针对 openGauss 的代码分支进行充分适配,直接使用原生 PostgreSQL 的构建逻辑会失败。


:magnifying_glass_tilted_left: 二、当前状态与兼容性结论

:white_check_mark: 兼容性结论

  • openGauss 6.0.0 与 PostGIS 2.4.2 并不具备开箱即用的兼容性
  • 尽管两者在理论上基于 PostgreSQL,但 openGauss 的内核改造导致 ABI 和 API 层面存在不兼容。
  • 社区已确认该问题是由于“内核接口变更”引发的 编译失败(Compilation Failure)

:hammer_and_wrench: 三、可行的解决方案与建议

方案 1:使用官方适配过的 PostGIS 分支

openGauss 社区为兼容 PostGIS 提供了专用的源码包:

:white_check_mark: 推荐源码地址:

https://opengauss.obs.cn-south-1.myhuaweicloud.com/dependency/postgis-xc-master-2020-09-17.tar.gz

说明postgis-xc 是 openGauss 改造过的 PostGIS 分支,专为 openGauss/GaussDB XC 设计。

编译依赖:

  • GCC 编译器版本 ≥ 7.3
  • 需要安装 autoconfautomakelibtool 等构建工具
  • 确保系统已安装 cxxabi.h(通常位于 libstdc++-devel 包中)

特殊补丁处理:

  • 编译过程中可能需要应用 postgis.patch
  • 若出现 postgis_topology.c 报错,需将第 249 行的 -> 改为 . 操作符(社区已有说明)

方案 2:降级或等待新版兼容包

  • 若当前 postgis-xc 分支仍不兼容 openGauss 6.0.0,建议:
    1. 使用 openGauss 3.0.0 或更早版本(已知兼容)
    2. 关注社区 Issue #1593 的更新,等待官方发布修复版本
    3. 尝试 openGauss 5.0.0 LTS:相比 6.0.0,其接口更稳定,兼容性更好

:warning: 不建议继续在 openGauss 6.0.0 上强行编译原始 PostGIS 源码,耗时长且成功率低。


方案 3:使用其他空间插件替代

如果只进行简单的空间计算,可考虑:

  • Q3C:用于天文坐标索引
  • PgSphere:用于球面计算

但注意:

  • 这两个插件在 openGauss 中也因缺少头文件(如 og_record_time.h)而无法编译
  • 说明 openGauss 的扩展生态目前对第三方插件支持仍有限。

:books: 四、建议操作流程

# 1. 下载 openGauss 专用的 PostGIS 源码
cd /opt/openGauss-server/third_party/dependency/postgis
wget https://opengauss.obs.cn-south-1.myhuaweicloud.com/dependency/postgis-xc-master-2020-09-17.tar.gz
tar -zxvf postgis-xc-master-2020-09-17.tar.gz

# 2. 设置环境变量
export GAUSSHOME=/opt/og
export PATH=$GAUSSHOME/bin:$PATH
export LD_LIBRARY_PATH=$GAUSSHOME/lib:$LD_LIBRARY_PATH
export toolhome=$GAUSSHOME/pggis_tools

# 3. 安装依赖库(Proj、GEOS、JSON-C、GDAL 等)
# 参考社区文档分步编译安装

# 4. 应用补丁(如有)
patch -p1 < postgis.patch

# 5. 配置并编译
cd postgis-xc/postgis-2.4.2
./configure \
  --prefix=$toolhome/pggis2.4.2 \
  --with-pgconfig=$GAUSSHOME/bin/pg_config \
  --with-projdir=$toolhome/proj \
  --with-geosconfig=$toolhome/geos/bin/geos-config \
  CFLAGS="-fPIC -O2 -fpermissive -DPGXC" \
  CC=g++

make && make install

:loudspeaker: 五、社区动态与建议

  • 讨论热度:用户 ly0731 等已在社区多次提问 openGauss 6.0.1 安装 PostGIS 的问题,反映出广泛需求。
  • 官方态度:openGauss 社区正在跟踪此问题,但修复进度较慢。
  • 建议
    • 您可以将编译日志提交至 GitCode Issue #1593,帮助加快修复。
    • 关注 weishifang 等活跃开发者的技术分享,他们常提供临时 workaround。

:white_check_mark: 总结

项目 结论
是否支持 openGauss 6.0.0 + PostGIS 2.4.2 :cross_mark: 不支持,因内核接口变更导致编译失败
是否有替代方案 :white_check_mark: 使用 postgis-xc 分支,或降级 openGauss 版本
是否有最新集成文档 :warning: 现有文档过时,建议参考源码和社区 Issue
建议操作 使用 postgis-xc 源码 + GCC 7.3 + 手动补丁

:bell: 强烈建议:在 openGauss 6.0.0 上集成 PostGIS 前,先在测试环境验证 postgis-xc 的兼容性,或等待社区发布正式支持版本。

如需进一步协助,可提供具体错误日志,以便定位更精确的修复点。

官网文档给出了6.0.0的集成问了吗不是?

文档有点滞后,可能需要在postgis里面做少量适配才能集成。

大佬有最新文档吗,可以提供一下吗,需要怎么适配呢

可以看下这个

好的 感谢 但是打不开 :rofl:

应该能打开,看一下网络。