无法在只读事务中执行 nextval()



实际上我们对某些方法使用了@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

前进序列并返回新值

所以它会更改值 - 这在只读事务中无法完成。

更新

set transaction_read_only to on;

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

从您的链接中引用克雷格

以前 9.0,Pg 只是没有注意到并警告你。

所以之前有一个错误,当你没有被警告时。 但是NextVal没有在下一个值上滚动

没有什么可以修复她 - 要么set transaction_read_only to off并推进序列,要么使用currval. 你可以有一个只读事务,但修改数据 - 逻辑在哪里?..

最新更新