postgresql - 不能在只读事务中执行 nextval()

标签 postgresql jpa

实际上我们对一些方法使用了 @Transactional(readOnly=true) 但这些方法以某种方式执行 nextVal() 这对其他数据库来说很好但是在 Postgres 9.6.3 上它会导致以下错误.

cannot execute nextval() in a read-only transaction

我正在查看 Postgres 邮件日志,发现此错误仅在 8.4.2 之后才会出现 https://www.postgresql.org/message-id/BANLkTik9ikVUU-bznOhZHmLbdEx5fverCw%40mail.gmail.com

有没有办法在数据库级别解决这个问题。

最佳答案

https://www.postgresql.org/docs/current/static/functions-sequence.html

Advance sequence and return new value

因此它会更改值 - 这不能在只读事务中完成。

更新

set transaction_read_only to on;

使 session 只读,而不仅仅是事务(SET LOCAL 就是这种情况)

从您的链接中引用 Craig

before 9.0, Pg just didn't notice and warn you.

所以在你没有被警告的时候就出现了一个错误。但是 nextval 没有滚动下一个值

没有什么可以解决她的问题 - 将 transaction_read_only 设置为关闭 并推进序列,或者使用 currval。您可以有一个只读事务,但可以修改数据 - 逻辑在哪里?..

关于postgresql - 不能在只读事务中执行 nextval(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45841042/

相关文章:

java - java.lang.IllegalArgumentException : Not a managed type 的问题

java - 插入到 JPA 集合而不加载它

mongodb - wolvenkit:数据库访问和备份

postgresql - 为什么 "setval()"会因 "relation ... does not exist"而失败?

sql - 如何使用 nextval() 在字符串中插入包含其自己 ID 的行

java - Hibernate 忽略序列生成器的初始值

java - 如何解决 N+1 选择问题?

java - Hibernate JPA 实体监听器 @Pre 和 @Post 无法按预期工作

ruby-on-rails - 如何在 Rails 中组合两个搜索参数

java - 将参数传递给 java 准备语句