2017-08-23 50 views
1

其實我們的一些方法使用@Transactional(readOnly=true)但這些方法在某些方面是罰款對於其他數據庫執行NEXTVAL(),但上的Postgres 9.6.3它會導致下面的錯誤。不能執行nextval()會在只讀事務

cannot execute nextval() in a read-only transaction 

我所經歷的Postgres的郵件日誌,發現那裏此錯誤後8.4.2 https://www.postgresql.org/message-id/BANLkTik9ikVUU-bznOhZHmLbdEx5fverCw%40mail.gmail.com

只有到來有什麼辦法在那裏在DB層面解決這一問題。

回答

0

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

高級序列並返回新值

所以它改變了價值 - 不能在只讀交易來完成。

更新

set transaction_read_only to on; 

使會議

9.0之前只能讀取,不能只是一個交易(這將與SET LOCAL的情況下),從你的鏈接引用克雷格

,Pg只是沒有注意到並警告你。

因此就出現了,當你沒有警告的錯誤更早。但nextval沒有推出下一個值

沒有什麼可以解決她 - 要麼set transaction_read_only to off和提前序列,或使用currval。你可以有一個只讀的事務,但修改數據 - 哪來的邏輯..

+0

我明白你的意思,但是,甲骨文相同的作品和MySQL作爲序列生成完全是出於交易,和Postgres還指出-a NEXTVAL操作?永遠不會回滾; –

+0

有沒有出路把NEXTVAL從Postgres的只讀事務範圍? –

+0

很好的觀點 - NEXTVAL是OK的交易的一部分,但它反對爲「只讀」。如果將transaction_read_only設置爲on,則只進行只讀會話,而不僅僅是事務。也許這不是太好的命名設置... –

相關問題