SORU
1 Mayıs 2012, Salı


PSQLException: geçerli işlem komutları işlem bloğunun sonuna kadar göz ardı iptal edildi

Sunucu (kesilmiş) aşağıdaki stacktrace görüyorum.JBoss 7.1.1 dosya Son oturum:

Caused by: org.postgresql.util.PSQLException: 
ERROR: current transaction is aborted, commands ignored until end of 
transaction block

at 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

Bu İsim günlük dosyasını inceleyerek ortaya aşağıdaki ifadeler:

STATEMENT:  SELECT count(*) FROM ISPN_MIXED_BINARY_TABLE_configCache
ERROR:  current transaction is aborted, commands ignored until end of transaction block
STATEMENT:  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

5.1.2 olan JBoss 7.1.1 Final ile sevk İnfinispan kullanıyorum.Son.

Bu oluyor sanırım.

  • İnfinispan SELECT count(*)... deyimini çalıştırmak için çalışırsa herhangi bir kayıt olup olmadığını görmek için içinde ISPN_MIXED_BINARY_TABLE_configCache;
  • İsim, nedense, bu açıklama gibi değil.
  • İnfinispan bu yok sayar ve devam CREATE TABLE deyimi ile pulluk.
  • İsim hala İnfinispan geri dönmek için başarısız oldu, aynı hareketi, düşündüğü için barfs ve bu işlem SELECT count(*)... ilk ifadesini bozdu.

Bu hata ne demek ve çevresinde nasıl bir fikriniz var mı?

CEVAP
27 EKİM 2012, CUMARTESİ


Bu hata Java ve postgresql kullanarak bir tablo üzerinde bir ekleme yapmak zorundayım. Bu hata yeniden oluşturmak gösterilmiştir:

org.postgresql.util.PSQLException: ERROR: 
current transaction is aborted, commands ignored until end of transaction block

Özet:

Bu hatayı alıyorum nedeni bir işlem girdiniz ve SQL Sorgu başarısız oldu ve bu başarısızlık onu parçalar ve bunu görmezden geldi. Ama bu kadar yeter, daha SONRA aynı bağlantı kullanılır, başka bir sorgu çalıştırmak için AYNI işlemi kullanarak değildi. Bu durum kırık bir işlem ek iş yapmak için kullanıyorsunuz, çünkü doğru oluşan ikinci sorgu atılmış olur. Varsayılan Postgresql bunu engeller.

Kullanıyorum:PostgreSQL 9.1.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2), 64-bit".

Postgresql şoförümpostgresql-9.2-1000.jdbc4.jar

Java sürümünü kullanarak:Java 1.7

Burada İstisna olarak göstermek için create deyimi tablo:

CREATE TABLE moobar
(
    myval   INT
);

Java program hata neden olur:

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();
    }   

}

Yukarıdaki kod benim için bu çıktıyı üretir:

start doing statement.execute

keep 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

Geçici çözümler:

Birkaç seçeneğiniz vardır:

  1. En basit çözüm: hareket etmeyin. connection.setAutoCommit(true); connection.setAutoCommit(false); ayarlayın. Sonra başarısız başarısız SQL sadece sql ifadesi yoksayıldı, çünkü işe yarıyor. İstediğiniz tüm sql deyimlerini başarısız için bekliyoruz ve postgresql bile seni durduramaz.

  2. Bir işlem içinde olan kalın, ama önce sql başarısız olduğunu tespit ettiğinde, ya da geri alma Yeniden Başlat/veya/hareket yeniden işlemek. O zaman istediğiniz gibi bir veritabanı bağlantısı üzerine bu kadar çok sql sorgu başarısız devam edebilirsiniz.

  3. Ve sql deyim başarısız olduğunda, durum oluşturulduktan özel Durum yakalamak göz ardı etmeyin. O zaman program hatalı biçimlendirilmiş bir sorgu üzerinde durur.

  4. Oracle yerine getir, Oracle bir işlem içinde bir bağlantı üzerinde bir sorgu başarısız olduğunda, bir özel durum değil ve o bağlantı ile devam edebilirsiniz.

Postgresql savunmanın işler bu şekilde yapmaya karar... Oracleolduyumuşak orta aptalca şeyler yapmasına izin verme ve Bakan.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Dan Gately

    Dan Gately

    13 AĞUSTOS 2006
  • ItZWaffleS420

    ItZWaffleS42

    9 EYLÜL 2011
  • Pál Zoltán Illés

    Pál Zoltán

    30 NİSAN 2007