该应用程序是使用Spring Boot,Spring Data,Hibernate,Hikari连接池,PostgreSQL开发的。 在我们的开发环境中使用默认的Postgre安装它可以正常工作。但是我们在客户环境中遇到安装问题。 错误是:
org.postgresql.util.PSQLException:错误:无法执行nextval() 只读事务
不幸的是,我们无法访问客户网络中的Postgre配置来检查交易默认值。但是pgsql和PgAdmin的简单更新查询可以使用相同的凭据。 我删除了所有" readOnly = true"来自@Transactional注释 - 没有运气,同样的错误。添加了
dataSource.setConnectionInitSql("SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE");
到Hikari数据源配置。也没有运气。 这两个PostgreSQL安装之间的另一个区别是:
偶尔会出现错误,同样的方法可以很好地运行几次但是会抛出此异常。这让我觉得某些池化连接处于只读状态,而其他则不是。但是为什么Spring没有明确地将每个新事务标记为读写,或者JDBC级别无法做到这一点?请帮忙调试。