2010-04-06 49 views
7

我已經在本地postgres.config中將'max_prepared_transactions'設置爲20,但事務失敗並且出現以下錯誤跟蹤(但僅在Linux上)。因爲在Windows中,相同的代碼可以無縫地工作,所以如果這不是權限問題,我就會徘徊。解決方案是什麼? 感謝 彼得在CentOS上使用Postgres 8.4.3準備交易

 
372300 [Atomikos:7] WARN atomikos - XA resource 'XADBMS': rollback for XID '3137332E3230332E3132362E3139302E746D30303030313030303037:3137332E3230332E3132362E3139302E746D31' raised -3: the XA resource detected an internal error 
org.postgresql.xa.PGXAException: Error rolling back prepared transaction 
     at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:357) 
     at com.atomikos.datasource.xa.XAResourceTransaction.rollback(XAResourceTransaction.java:873) 
     at com.atomikos.icatch.imp.RollbackMessage.send(RollbackMessage.java:90) 
     at com.atomikos.icatch.imp.PropagationMessage.submit(PropagationMessage.java:86) 
     at com.atomikos.icatch.imp.Propagator$PropagatorThread.run(Propagator.java:62) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:651) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:676) 
     at java.lang.Thread.run(Thread.java:595) 
Caused by: org.postgresql.util.PSQLException: ERROR: prepared transaction with identifier "1096044365_MTczLjIwMy4xMjYuMTkwLnRtMDAwMDEwMDAwNw==_MTczLjIwMy4xMjYuMTkwLnRtMQ==" does not exist 
     at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2062) 
     at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1795) 
     at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:479) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:353) 
     at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:299) 
     at org.postgresql.xa.PGXAConnection.rollback(PGXAConnection.java:347) 
+0

我也檢查了/ proc/sys/kernel的設置。它們都超出了Postgresql手冊'資源消耗'所描述的限制 – 2010-04-06 11:02:06

+0

你可以運行你的命令,從Linux機箱上的psql提示符導致問題,以獲取java層,看看它是否工作? – Kuberchaun 2010-04-06 22:26:21

回答

6

編輯以幫助其他的誰上搜索相同的症狀

的錯誤見解表明你仍然超過您max_prepared_transactions限制。

確保您編輯的配置文件是正在使用的配置文件,並且您告訴postgresql重新加載其配置以獲取已編輯的max_prepared_transactions

您可以查詢數據庫,找出它使用了與SQL該設置:

SHOW max_prepared_transactions; 

原來的答覆遵循(基於假設max_prepared_transactions設置正確):


你使用setAutoCommit()嗎?您可能會遇到這個最近發現的bug:

http://archives.postgresql.org/pgsql-jdbc/2010-03/msg00013.php

這等崗位顯示製備XA連接,你可以看看一些小的可重複的測試在看,如果你正在做類似的事情:

http://archives.postgresql.org/pgsql-jdbc/2009-01/msg00025.php

+2

感謝您的重播。 我已經解決了這個問題。問題是我最近從Postgresql 8.1升級到8.4.3以支持分佈式事務。在這個過程中,我在/etc/init.d/postgresql中留下了一個'毛刺',因爲應用程序在開始時仍然使用舊版本的配置。在舊的配置'max_prepared_transactions = 0'意味着沒有與postgresql xtransaction – 2010-04-06 23:13:38