纯Java的PostgreSQL JDBC驱动为何加载非Java共享库失败?
问题原因分析
- 查询复杂度触发JIT加载:小数据量或简单查询无需启用PostgreSQL的LLVM JIT编译优化,因此容器内查询可正常执行;当处理大数据量或复杂查询时,容器内的PostgreSQL 13相关库会尝试加载本地的
llvmjit.so以支持JIT优化——pgJDBC确实是纯Java Type 4驱动,但如果你的Clojure应用依赖了PostgreSQL本地客户端库(比如部分封装libpq的Clojure数据库工具),就会触发该本地库的加载流程。 - 容器系统库版本不兼容:容器基础镜像中的
/lib/x86_64-linux-gnu/libstdc++.so.6缺少GLIBCXX_3.4.30版本,无法满足PostgreSQL 13的llvmjit.so库的依赖要求,导致加载失败。 - 本地环境无异常的原因:你本地安装的是PostgreSQL 15,其客户端及服务器端的LLVM JIT依赖的系统库版本与本地系统的
libstdc++.so.6完全兼容,因此执行各类查询均无问题;而容器内使用的是PostgreSQL 13的相关库,环境不匹配引发报错。
内容的提问来源于stack exchange,提问作者ealfonso
相关产品推荐
相关产品推荐

