jdbc.postgresql 尝试加载非 Java 共享库?

问题描述 投票:0回答:1

jdbc.postgresql 驱动程序说它是纯 java 且与平台无关:

PostgreSQL® JDBC 驱动程序(简称 pgJDBC)允许 Java 程序 使用独立于数据库的标准连接到 PostgreSQL® 数据库 Java代码。是一个用纯Java编写的开源JDBC驱动程序(类型 4),并以 PostgreSQL® 本机网络协议进行通信。 因此,驱动程序是独立于平台的;一旦编译, 该驱动程序可以在任何系统上使用。

这看起来很棒。但是当我将 clojure 应用程序放入 docker 容器中时,jdbc posgresql 失败了:

org.postgresql.util.PSQLException: ERROR: could not load library "/usr/lib/postgresql/13/lib/llvmjit.so": /lib/x86_64-
linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libz3.so.4)
           QueryExecutorImpl.java:2713 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse
           QueryExecutorImpl.java:2401 org.postgresql.core.v3.QueryExecutorImpl.processResults
            QueryExecutorImpl.java:368 org.postgresql.core.v3.QueryExecutorImpl.execute                               
                  PgStatement.java:498 org.postgresql.jdbc.PgStatement.executeInternal
                  PgStatement.java:415 org.postgresql.jdbc.PgStatement.execute                                        
          PgPreparedStatement.java:190 org.postgresql.jdbc.PgPreparedStatement.executeWithFlags
          PgPreparedStatement.java:134 org.postgresql.jdbc.PgPreparedStatement.executeQuery
                         jdbc.clj:1090 clojure.java.jdbc/execute-query-with-params       
                         jdbc.clj:1084 clojure.java.jdbc/execute-query-with-params  
                         jdbc.clj:1113 clojure.java.jdbc/db-query-with-resultset*           
                         jdbc.clj:1093 clojure.java.jdbc/db-query-with-resultset*          
                         jdbc.clj:1182 clojure.java.jdbc/query   
                         jdbc.clj:1144 clojure.java.jdbc/query                                                        
                         jdbc.clj:1160 clojure.java.jdbc/query                                                        

如果 JDBC 驱动程序应该是纯 java 的,为什么它要尝试查找一些非 java 共享库?为什么它专门尝试加载 postgresql 13 共享对象库(我的系统只有 postgresql-15)?

java postgresql jdbc
1个回答
0
投票

JDBC postgres 驱动程序文档没有骗你。该错误是来自 postgres 服务器本身,而不是来自 JIT 驱动程序。整个 postgres 安装已损坏(例如,尝试从命令行运行

psql
工具,您将收到相同的错误)。

您的问题中没有足够的详细信息来提示您如何解决该错误。然而,实际的问题是:“为什么 postgres JDBC 驱动程序需要这个‘非 java 共享库’”,答案是:它不需要那个库;它不需要这个库。不过你的 postgres 服务器确实如此。

© www.soinside.com 2019 - 2024. All rights reserved.