我可以在spring mvc上開發的應用程序上看到內部服務器錯誤,使用wildfly作爲網絡服務器,數據庫爲PostgreSQL
。這個例外是什麼意思?錯誤:無法在只讀事務中執行nextval() - PostgreSQL
ERROR: cannot execute nextval() in a read-only transaction
它以前工作得很好。我試圖在這裏找到解決方案在stackoverflow但沒有找到任何可以解決這個問題。
我可以在spring mvc上開發的應用程序上看到內部服務器錯誤,使用wildfly作爲網絡服務器,數據庫爲PostgreSQL
。這個例外是什麼意思?錯誤:無法在只讀事務中執行nextval() - PostgreSQL
ERROR: cannot execute nextval() in a read-only transaction
它以前工作得很好。我試圖在這裏找到解決方案在stackoverflow但沒有找到任何可以解決這個問題。
我意味着什麼,它說,這裏是例子:
t=# create sequence so49;
CREATE SEQUENCE
t=# begin;
BEGIN
t=# select nextval('so49');
nextval
---------
1
(1 row)
t=# set transaction_read_only TO on;
SET
t=# select nextval('so49');
ERROR: cannot execute nextval() in a read-only transaction
t=# end;
ROLLBACK
我想你連接爲所謂的RO的用戶,這是用戶與 「transaction_read_only」 設置爲true,EG:
t=# select rolconfig from pg_roles where rolname ='ro';
rolconfig
----------------------------
{transaction_read_only=on}
(1 row)
你可以切換關閉你的課程的用戶,但是這是超出了範圍,我相信
https://www.postgresql.org/docs/current/static/sql-set-transaction.html
函數nextval()
用於增加一個序列,該序列修改數據庫的狀態。
由於您處於只讀事務中,您會遇到該錯誤。這可能發生,因爲
您明確啓動了與START TRANSACTION READ ONLY
或類似的只讀事務。
配置參數default_transaction_read_only
設置爲on
。
您已連接到流式複製備用服務器。
如果default_transaction_read_only
設置爲on
,您可以用
START TRANSACTION READ WRITE;
開始讀寫交易或通過編輯postgresql.conf
或超級用戶命令
ALTER SYSTEM SET default_transaction_read_only = off;
default_transaction_read_only如何將其更改爲關閉? –
我已經擴展了答案來涵蓋此。 –
謝謝你。 –
更改設置正如其他人指出nextval()
實際上更新數據庫以獲得一個新的序列,所以不能用於交易標記爲只讀。
當你使用Spring
我懷疑這意味着你正在使用spring-transaction支持。如果您使用基於註解的事務支持,那麼你,如果你有
@Transactional(readOnly=true)
得到一個只讀交易這意味着,當春天開始交易就會把它變成只讀模式。
刪除readOnly=true
位,而是創建一個常規的可寫事務。
春季交易控制在http://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html
你的問題是什麼? –
解決方案是什麼?這個異常顯示了什麼? –
它說,你不能用'NEXTVAL()',它增加一個序列,因此是寫入操作時,在只讀事務。您之前可能在讀寫事務中,並且您的配置切換爲只讀事務,原因是我們無法僅使用錯誤消息進行調查。 –