2010-09-15 10 views
7

estoy ejecutando este comando en una secuencia de comandos de Python:psycopg2.InternalError: ¿cómo puedo obtener más información útil?

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

y conseguir:

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

Sin embargo si intento la sql_string desde la línea de comandos psql, funciona muy bien. Sé que el script se está conectando a la base de datos, porque puedo ejecutar otros comandos.

¿Cómo puedo obtener Python para que me brinde más información útil sobre por qué este comando está fallando dentro del script?

Respuesta

8

Prueba esto:

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

Si todavía está recibiendo "transacción actual se aborta, comandos ignorados hasta el final del bloque de transacción", entonces su error es más atrás en su transacción y esta consulta sólo está fallando debido a la una consulta anterior que falla (y por lo tanto invalida la transacción completa).

Los detalles para pgerror se pueden encontrar en la documentación en http://initd.org/psycopg/docs/module.html#exceptions

4

Puede también cola de la salida de PostgreSQL para ver la consulta que ha provocado el error:

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

Esto es a menudo más fácil de editar el script para depurarlo

+0

Al mirar el registro, inmediatamente vi que otra tabla tenía un error de inserción, y esto creó el bloque de transacción. El inserto de la tabla, pensé, era que el problema estaba bien. – zerocog

Cuestiones relacionadas