postgresql - 在 CentOS 上使用 Postgres 8.4.3 准备事务

标签 postgresql xa atomikos

我已在本地 postgres.config 中将“max_prepared_transactions”设置为 20,但交易失败并显示以下错误跟踪(但仅在 Linux 上)。由于在 Windows 中相同的代码可以无缝运行,如果这不是许可问题,我正在徘徊。解决方案是什么? 谢谢 彼得

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)

最佳答案

编辑以帮助其他搜索相同症状见解的人

该错误表明您仍然超出了您的 max_prepared_transactions 限制。

确保您编辑的配置文件是正在使用的配置文件,并且您已告诉 postgresql 重新加载其配置以获取您编辑的 max_prepared_transactions

您可以通过 SQL 查询数据库以找出该设置正在使用什么:

SHOW max_prepared_transactions;

原始答案如下(基于正确设置 max_prepared_transactions 的假设):


您是否在使用 setAutoCommit()?您可能遇到了这个最近发现的错误:

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

另一篇文章展示了一些准备 XA 连接的小型可重复测试,您可以查看这些测试,看看您是否在做类似的事情:

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

关于postgresql - 在 CentOS 上使用 Postgres 8.4.3 准备事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2582266/

相关文章:

java - AtomikosDataSourceBean.getMaxLifetime() 中的 AbstractMethodError

PHP:检查 postgres 连接是否存在?

xml - 如何从 wiki 备份并导入 postgresql?

r - 如何使用 R 和 Rpostgres 使用参数化查询,以便接受变量中包含的值作为 psql 的输入

java - XA模式下Ehcache无法将数据溢出到磁盘(NotSerializedException)

transactions - JTA 是否可以跨多个线程工作?

postgresql - 将 postgresql 中的 UTC 时区转换为 EST(本地时间)

mysql - 将 XA 事务与 JDBC、MySQL 和 Microsoft SQL Server 结合使用

mysql - 带有 MySQL JTA 的 Atomikos 无法正常工作

spring - Hibernate 5 与 Spring JTA