psycopg2.InternalError: как я могу получить больше полезной информации? - PullRequest
8 голосов
/ 15 сентября 2010

Я запускаю эту команду в скрипте Python:

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

и получение:

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

Однако, если я попробую sql_string из командной строки psql, все будет работать нормально. Я знаю, что скрипт подключается к базе данных, хорошо, потому что я могу запускать другие команды.

Как я могу заставить Python дать мне более полезную информацию о том, почему эта команда не выполняется в скрипте?

Ответы [ 2 ]

8 голосов
/ 15 сентября 2010

Попробуйте это:

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

Если вы по-прежнему получаете сообщение «текущая транзакция прервана, команды игнорируются до конца блока транзакции», то ваша ошибка снова возвращается в вашу транзакцию, и этот запрос сбой только из-за сбоя предыдущего запроса (и тем самым делает недействительной всю транзакцию ).

Подробности для pgerror можно найти в документации по http://initd.org/psycopg/docs/module.html#exceptions

7 голосов
/ 24 октября 2014

Вы также можете настроить вывод postgresql, чтобы увидеть запрос, вызвавший ошибку:

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

Это часто проще, чем редактировать скрипт для его отладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...