问题标签 [pgjdbc-ng]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
270 浏览

java - 使用 JDBI 和 PGJDBC-NG Postgres 驱动程序的“SQLException:解包错误”

我正在使用 JDBI 连接到我的 Postgres 数据库。这一直运作良好。今天我决定尝试用PGJDBC-NG驱动替换原生的 Postgres驱动。一切都很好,直到我尝试我的第一个简单查询:

不幸的是,这导致:

org.jdbi.v3.core.ConnectionException:java.sql.SQLException:解包错误

调试到应用程序我发现异常发生在customizeHandleJDBIPostgresPlugin类的方法中:

异常在unwrap方法的第一行抛出。问题似乎是,使用新驱动程序时,getConnection返回的实例PGDirectConnection不能从 指定PGConnection,正如 unwrap 方法调用所指定的那样。

有解决办法吗?我想我可以扩展PostgresPlugin和覆盖customizeHandleto unwrap using的实现,PGDirectConnection但如果可能的话,我不希望这样做。

编辑:呃,不能覆盖customizeHandle,因为PostgresTypes.addTypesToConnection不是公开的。

0 投票
0 回答
114 浏览

postgresql - pgjdbc-ng 抛出神秘的 ServiceLoader 错误

我的日志中出现了一个非常奇怪的错误。这只是随机发生的,并不是由任何版本升级触发的。

更奇怪的是:当我在 Eclipse 中开发应用程序时会发生这种情况。如果我停止应用程序然后在 Eclipse 中重新启动,它就会发生。如果我完全关闭 Eclipse 并重新打开它,问题就会消失并且所有连接都可以正常打开。

如果我查看 Postgres 服务器上的连接,我没有发现任何不合适的地方。当它工作时,会打开 10 个连接。当它失败时,只有一个。

0 投票
2 回答
1326 浏览

java - jOOQ 将偏移日期时间返回为 Z (UTC),即使它不是

我有一个简单的 id 的 Postgres 测试表,带有时区的时间戳。下面的测试和输出应该是不言自明的,但总而言之,我插入了一个带有 -6 偏移量的时间戳的行。它被正确地插入到数据库中,然后以相同的时间从数据库中加载出来,但是偏移量错误,特别是 Z 而不是 -6。

我尝试将我的数据库设置为 UTC,当我在命令行手动选择时,它会正确显示 UTC 时间。将数据库设置为山,它显示预期时间,偏移量为 -6。

通过在 jOOQ 中执行的语句将数据库强制到不同的时区似乎无济于事。

强制我的系统时间为 UTC 有效地解决了这个问题,但由于许多原因是不可接受的。

这是单元测试:

和输出:

有趣的是,如果我在中央添加一个日期,小时会正确更改为山区,但往返后的输出仍然只是愉快地报告 Z。

我认为这不是预期的?难道我做错了什么?如果没有,有什么想法可以在全球范围内适用的解决方法吗?在这方面有几个开发人员,我对每次选择时都必须用一些特殊的逻辑处理日期并不感到兴奋,这似乎很脆弱。

我一直在运行 3.10,但刚刚升级到 3.12,结果相同。

0 投票
1 回答
145 浏览

java - REF CURSOR 不适用于 pgjdbc-ng 驱动程序

我正在尝试REFCURSOR使用 PGJDBC-NG 驱动程序返回的示例,但出现异常

我正在尝试的源代码/代码是 -

0 投票
1 回答
798 浏览

spring-boot - 将测试容器与另一个数据库驱动程序一起使用

我在带有 Kotlin 的 Spring Boot 应用程序中使用 Testcontainers ( https://www.testcontainers.org/ ) 和 Postgres 模块,并按照本教程 ( https://www.wwt.com/article/using- testcontainers-for-unit-tests-with-spring-and-kotlin)。此外,我使用 Liquibase 来填充测试容器,并且还配置了以下内容:

到目前为止一切正常,但我想使用来自https://impossibl.github.io/pgjdbc-ng/的驱动程序,因为来自 PostgreSQL 的标准驱动程序不提供收听数据库触发器通知的可能性,我想在我的集成测试中测试此代码(https://impossibl.github.io/pgjdbc-ng/docs/current/user-guide/#extensions-notification )。

为此,我将 application.yml 更改如下:

不幸的是,这会导致以下错误消息:

问题似乎是 Testcontainers 需要标准驱动程序才能从 Java 创建数据库。但我想知道如何更改驱动程序进行测试?

更新 1Mikhail Burshtey回答中所述,我已经覆盖了 PostgreSQL 容器类:

现在使用此类时,我遇到的问题是负责创建容器的 PostgreSQL 默认驱动程序不接受 url:

更新 2 实际应用程序(没有测试容器)有效。为了启动它,我在一个 Docker 容器中使用 PostgreSQL:

以下是 application-dev.yml 的相关摘录:

更新 3 这是我的堆栈跟踪:

0 投票
1 回答
1168 浏览

kotlin - 如何正确配置 HikariCP 以使用必须保持活动的连接?

我正在使用带有 Spring Boot Data JPA 的 Spring Boot 2.4.0 连接到 PostgreSQL,并使用基于 JPA 的存储库执行典型的读写操作。由于数据库也被其他服务使用,我使用 LISTEN/NOTIFY 功能 ( https://www.postgresql.org/docs/9.1/sql-listen.html ) 来通知来自 PostgeSQL 的更改。为此,我使用驱动程序com.impossibl.postgres.jdbc.PGDriver而不是默认驱动程序和以下代码使 Spring 侦听数据库的更改:

这是此处描述的侦听器的类似 Kotlin 的实现:https ://impossibl.github.io/pgjdbc-ng/docs/current/user-guide/#extensions-notifications

侦听器可以工作,但是一天或多天后,我收到以下错误:

为了找到问题,我按照https://github.com/brettwooldridge/HikariCP/issues/1111#issuecomment-569552070上的建议启用了 Hikari 的日志记录。以下是日志摘录的输出:

对我来说,日志看起来是正确的,但一段时间后,活动连接越来越多......

...直到涉及到所描述的错误消息。

我想知道如何正确配置 Hikari 或更改我的代码以避免所描述的错误?我希望你能帮忙。

0 投票
0 回答
69 浏览

jdbc - 为复合行实现 SQLData 接口

我正在关注关于复合类型的官方 psql 用户指南(https://www.postgresql.org/docs/current/rowtypes.html)并尝试为https://impossibl.github.io/pgjdbc-nginventory_item类型实现 SQLData /docs/current/user-guide/#_java_sql_sqldata

据我了解,SQLData 实现的类型映射应附加到活动连接。在我的情况下这并不容易(我正在使用 clojure + clojure.java.jdbc + 连接池)。此外,将其添加到每个连接中感觉不正确。

有没有办法只设置一次映射,以便每个连接都使用它?

SQLData 的虚拟实现(还只读)

0 投票
0 回答
75 浏览

java - pgjdbc-ng 与 pgjdbc 中的不同行为?

为了利用异步通知,我将 postgresql jdbc 驱动程序从 pgjdbc 交换到 pgjdbc-ng,并且我在事务隔离级别可序列化时遇到了不同的行为。

执行查询:insert into "_revision"(revision, timestamp) select coalesce(max(revision), 0)+1, transaction_timestamp() at time zone 'utc' from "_revision" returning revision使用 pgjdbc 驱动程序可序列化的事务隔离级别同时执行两次会导致错误:

而与 pgjdbc-ng 驱动程序相同会导致错误:

除了使用正确的数据源设置 hikari 连接池之外,我没有更改执行代码。有没有人经历过类似的事情或知道为什么 pgjdbc-ng 场景不会导致序列化失败?

0 投票
0 回答
102 浏览

spring-boot - 使用 HikariCP 和 impossibl/pgjdbc-ng 驱动程序的 Spring Boot 应用程序无法连接到 pgbouncer

我们已经使用 HikariCP 和 impossibl/pgjdbc-ng 驱动程序实现了一个 spring-boot 应用程序。只要数据库连接 url 引用 postgres 数据库,应用程序就可以正常运行。但是,当数据库 url 包含 pgbouncer 的地址时,应用程序无法启动并显示以下错误消息:

...

我找到了一些建议,用另一个数据源实现替换 HikariCP 来解决问题,但这不是一个选项,因为我们不想更改我们的应用程序。所以我的问题是:

  1. 错误信息的原因是什么?
  2. 是否可以通过向 JDBC URL 添加一些参数来解决问题?

提前致谢!

0 投票
0 回答
12 浏览

postgresql - PostgreSql 连接器未在 Spring 应用程序中连接

我正在尝试在我的 Spring 应用程序中使用 PGJDBC-NG 驱动程序进行 Postgress JDBC 连接。

但是在运行时给出错误...

[err] at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:978) [err] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) [err] at org. springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) [err] at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) [err] at javax.servlet.http.HttpServlet。 service(HttpServlet.java:707) [err] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) [err] at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [err] 在 com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1287) [err] 在 [internal classes] [err] 在 hcl.common.filter.FilterToGetTimeOut.doFilterInternal(FilterToGetTimeOut.java:50) [err] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:207) [err ] 在 [internal classes] [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) [err] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke( FilterSecurityInterceptor.java:127) [err] at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter( FilterChainProxy.java:331) [err] at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:115) [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [err] at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) [错误] 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [错误] 在 org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) [错误] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [err] at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:169) [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain。doFilter(FilterChainProxy.java:331) [err] at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter( FilterChainProxy.java:331) [err] at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy. java:331) [err] at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:121) [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy. java:331) [err] 在 org.springframework.security.web.csrf.CsrfFilter。doFilterInternal(CsrfFilter.java:124) [err] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [err] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy. java:331) [err] at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) [err] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [err] 在 org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [err] 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) [err ] at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [err] at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) [err] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [err] at org. springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) [err] at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) [err] at org.springframework.security。 web.FilterChainProxy.doFilter(FilterChainProxy.java:177) [err] at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) [err] at org.springframework.web.filter.DelegatingFilterProxy.doFilter( DelegatingFilterProxy.java:262) [err] 在 com.ibm.ws.webcontainer.filter.FilterInstanceWrapper。doFilter(FilterInstanceWrapper.java:207) [err] at [internal classes] [err] at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:122) [err] at org.springframework.web。 filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) [err] at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:207) [err] at [internal classes] [err] at java。 util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [err] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [err] at java.lang.Thread.run(Thread. java:748) [err] 引起:java.lang.IncompatibleClassChangeError: Class io.netty.channel.DefaultChannelHandlerContext 没有在 com 实现请求的接口 io.netty.channel.ChannelOutboundInvoker [err]。impossibl.postgres.protocol.v30.ProtocolChannel.flush(ProtocolChannel.java:99) [err] 在 com.impossibl.postgres.protocol.v30.SSLQueryRequest.execute(SSLQueryRequest.java:104) [err] 在 com.impossibl。 postgres.protocol.v30.MessageDispatchHandler.write(MessageDispatchHandler.java:106) [err] at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:658) [err] at io.netty.channel.AbstractChannelHandlerContext.access$2000 (AbstractChannelHandlerContext.java:32) [错误] 在 io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.write(AbstractChannelHandlerContext.java:939) [错误] 在 io.netty.channel.AbstractChannelHandlerContext$WriteAndFlushTask.write(AbstractChannelHandlerContext.java:991 ) [错误] 在 io.netty.channel.AbstractChannelHandlerContext$AbstractWriteTask.run(AbstractChannelHandlerContext.java:924) [err] 在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:370) [err] 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357) [err ] 在 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116) [err] ... 1 更多`