微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在只读事务中执行更新

如何解决无法在只读事务中执行更新

我们使用 Postgresql 作为数据库。应用使用spring库,事务由spring管理。事务注释被正确使用,在需要它作为只读的地方,以及它与写能力一起使用的地方。但是在日志中我们偶尔会看到异常

2020-12-30 11:39:13.513 [jmsContainer-8] ERROR o.h.e.jdbc.spi.sqlExceptionHelper - ERROR: cannot execute nextval() in a read-only transaction
2020-12-30 11:39:13.515 [jmsContainer-8] ERROR o.s.t.s.TransactionSynchronizationUtils - TransactionSynchronization.afterCompletion threw exception
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: Could not extract ResultSet
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:147)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
        at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
        at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:780)
        at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:758)
        at jdk.internal.reflect.GeneratedMethodAccessor2794.invoke(UnkNown Source)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:301)
        at com.sun.proxy.$Proxy226.persist(UnkNown Source)

通过 pg_bouncer 和 pool_mode=sessionserver_reset_query=disCARD ALL 提供与 Postgresql 的连接。

我们尝试重新启动 pg_bouncer,尽管认情况下某些连接设置为只读并保持活动状态,但它没有帮助。 有什么想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。