2010-09-15 16 views
7

Bu komutu bir Python komut dosyasında çalıştırıyorum:psycopg2.InternalError: Daha yararlı bilgiler nasıl edinebilirim?

try: 
    print sql_string 
    cursor.execute(sql_string) 
except: 
    print sys.exc_info() 

ve alma:

(<class 'psycopg2.InternalError'>, InternalError('current transaction is aborted, commands ignored until end of transaction block\n',), <traceback object at 0x1010054d0>) 

Ancak, xqx20 komutunu psql komut satırından denersem, gayet iyi çalışır. Komut dosyasının veritabanına bağlandığını biliyorum, çünkü diğer komutları çalıştırabilirim.

Python'u, bu komutun neden betiğin içinde başarısız olduğuna dair daha faydalı bilgiler vermesini nasıl sağlayabilirim?

cevap

8

bu deneyin:

try: 
    print sql_string 
    cursor.execute(sql_string) 
except Exception, e: 
    print e.pgerror 

hala alıyorsanız "geçerli işlem kesilir, komutlar işlem bloğunun sonuna kadar ihmal" ardından hata daha geri İşleminizdeki ve bu sorgu sadece dolayı başarısız önceki bir sorgu başarısız (ve böylece tüm işlemin geçersiz kılınması).

$ tail -f /var/log/postgresql/postgresql.log 

Bu düzenleme genellikle daha kolaydır: pgerror için

ayrıntıları Ayrıca kuyruk postgresql çıkış hataya neden sorguyu görmek için http://initd.org/psycopg/docs/module.html#exceptions

4

de belgelerinde bulunabilir betik hata ayıklamak için.

+0

Günlüğe baktığımızda, hemen başka bir tablonun ekleme hatası olduğunu gördüm ve bu işlem bloğunu oluşturdu. Tablo eklemek, sorun sadece iyi olduğunu düşündüm. – zerocog