postgresql – PSQLException:当前事务被中止,命令被忽略,直到事务块结束

postgresql – PSQLException:当前事务被中止,命令被忽略,直到事务块结束,第1张

概述我看到以下(截断)堆栈跟踪在JBoss 7.1.1的server.log文件Final: Caused by: org.postgresql.util.PSQLException: ERROR: current transaction is aborted, commands ignored until end of transaction blockat org.postgresql.c 我看到以下(截断)堆栈跟踪在JBoss 7.1.1的server.log文件Final:
Caused by: org.postgresql.util.PsqlException: ERROR: current transaction is aborted,commands ignored until end of transaction blockat org.postgresql.core.v3.queryExecutorImpl.receiveErrorResponse(queryExecutorImpl.java:2102)at org.postgresql.core.v3.queryExecutorImpl.processResults(queryExecutorImpl.java:1835)at org.postgresql.core.v3.queryExecutorImpl.execute(queryExecutorImpl.java:257)at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)at org.postgresql.jdbc2.AbstractJdbc2Statement.executeUpdate(AbstractJdbc2Statement.java:302)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.6.0_23]at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) [rt.jar:1.6.0_23]at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) [rt.jar:1.6.0_23]at java.lang.reflect.Method.invoke(Method.java:597) [rt.jar:1.6.0_23]at org.postgresql.ds.jdbc23.AbstractJdbc23PooledConnection$StatementHandler.invoke(AbstractJdbc23PooledConnection.java:455)at $Proxy49.executeUpdate(UnkNown Source)   at org.jboss.jca.adapters.jdbc.WrappedStatement.executeUpdate(WrappedStatement.java:371)at org.infinispan.loaders.jdbc.tableManipulation.executeUpdatesql(tableManipulation.java:154) [infinispan-cachestore-jdbc-5.1.2.FINAL.jar:5.1.2.FINAL]... 154 more

检查Postgres日志文件显示以下语句:

STATEMENT:  SELECT count(*) FROM ISPN_MIXED_BINARY_table_configCacheERROR:  current transaction is aborted,commands ignored until end of transaction blockSTATEMENT:  CREATE table ISPN_MIXED_BINARY_table_configCache(ID_ColUMN VARCHAR(255) NOT NulL,DATA_ColUMN BYTEA,TIMESTAMP_ColUMN BIGINT,PRIMARY KEY (ID_ColUMN))ERROR:  relation "ispn_mixed_binary_table_configcache" does not exist at character 22

我使用JBoss 7.1.1 Final附带的Infinispan,它是5.1.2.Final。

所以这是我认为发生:

> Infinispan尝试运行SELECT count(*)…语句以查看ISPN_MIXED_BINARY_table_configCache中是否有任何记录;
> Postgres,由于某种原因,不喜欢这个语句。
> Infinispan忽略此 *** 作,并提前使用CREATE table语句。
> Postgres barfs,因为它仍然认为它是同一个事务,Infinispan未能回滚,这个事务是从第一个SELECT计数(*)…语句。

这个错误是什么意思和任何想法如何解决它?

我得到这个错误使用Java和postgresql在表上执行插入。我将说明如何重现这个错误:
org.postgresql.util.PsqlException: ERROR: current transaction is aborted,commands ignored until end of transaction block

概要:

得到此错误的原因是因为您输入了一个事务,并且您的一个SQL查询失败,并且您忽略了该失败并忽略它。但这还不够,所以你使用同样的连接,使用SAME TRANSACTION来运行另一个查询。第二个正确形成的查询会抛出异常,因为您正在使用损坏的事务来执行其他工作。 Postgresql默认阻止你这样做。

我使用:Postgresql 9.1.6 on x86_64-redhat-linux-gnu,由gcc(GCC)编译4.7.2 20120921(Red Hat 4.7.2-2),64位“。

我的postgresql驱动是:postgresql-9.2-1000.jdbc4.jar

使用java版本:Java 1.7

这里是表的create语句来说明异常:

CREATE table moobar(    myval   INT);

Java程序导致错误:

public voID postgresql_insert(){    try      {        connection.setautoCommit(false);  //start of transaction.        Statement statement = connection.createStatement();        System.out.println("start doing statement.execute");        statement.execute(                "insert into moobar values(" +                "'this sql statement fails,and it " +                "is gobbled up by the catch,okfine'); ");        //The above line throws an exception because we try to cram        //A string into an Int.  I Expect this,what happens is we gobble         //the Exception and ignore it like nothing is wrong.        //But remember,we are in a TRANSACTION!  so keep reading.        System.out.println("statement.execute done");        statement.close();    }    catch (sqlException sqle)    {        System.out.println("keep on truckin,keep using " +                "the last connection because what Could go wrong?");    }    try{        Statement statement = connection.createStatement();        statement.executequery("select * from moobar");        //This sql is correctly formed,yet it throws the         //'transaction is aborted' sql Exception,why?  Because:        //A.  you were in a transaction.        //B.  You ran a sql statement that Failed.        //C.  You dIDn't do a rollback or commit on the affected connection.    }    catch (sqlException sqle)    {        sqle.printstacktrace();    }   }

上面的代码为我生成这个输出:

start doing statement.executekeep on truckin,keep using the last connection because what Could go wrong?org.postgresql.util.PsqlException:   ERROR: current transaction is aborted,commands ignored until   end of transaction block

解决方法:

您有几个选项:

>最简单的解决方案:不要在事务中。设置connection.setautoCommit(false);到connection.setautoCommit(true);.它工作原因,因为失败的sql只是被忽略作为失败的SQL语句。你欢迎失败SQL语句所有你想要和postgresql不会阻止你。
>保持在一个事务中,但是当您检测到第一个sql失败时,回滚/重新启动或提交/重新启动事务。然后,您可以根据需要在该数据库连接上继续失败尽可能多的SQL查询。
>不捕获并忽略在SQL语句失败时抛出的异常。然后程序将停止在格式不正确的查询。
>获取Oracle,Oracle不会在事务中的连接上的查询失败并继续使用该连接时抛出异常。

在保护postgresql的决定做这样的事情…甲骨文让你软中间让你做蠢的东西,俯瞰它。

总结

以上是内存溢出为你收集整理的postgresql – PSQLException:当前事务被中止,命令被忽略,直到事务块结束全部内容,希望文章能够帮你解决postgresql – PSQLException:当前事务被中止,命令被忽略,直到事务块结束所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1172887.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存