django / postgres: управляемый блок транзакции завершился с ожиданием COMMIT / ROLLBACK - PullRequest
1 голос
/ 12 августа 2011

Я хочу запустить manage.py sqldiff myapp (команда из расширения django), но я получаю следующую ошибку:

Traceback (most recent call last):
  File "manage.py", line 11, in <module>
    execute_manager(settings)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 438, in execute_manager
    utility.execute()
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 379, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 191, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 220, in execute
    output = self.handle(*args, **options)
  File "/usr/local/lib/python2.7/dist-packages/django_extensions/management/commands/sqldiff.py", line 596, in handle
    sqldiff_instance.find_differences()
  File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py", line 222, in inner
    self.__exit__(None, None, None)
  File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py", line 207, in __exit__
    self.exiting(exc_value, self.using)
  File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py", line 302, in exiting
    leave_transaction_management(using=using)
  File "/usr/local/lib/python2.7/dist-packages/django/db/transaction.py", line 56, in leave_transaction_management
    connection.leave_transaction_management()
  File "/usr/local/lib/python2.7/dist-packages/django/db/backends/__init__.py", line 115, in leave_transaction_management
    raise TransactionManagementError("Transaction managed block ended with "
django.db.transaction.TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK

manage.py runserver, shell, shell_plus все работают нормально, но sqldiffкомандные дроссели.Я попытался:

  • перезапустить сервер postgres
  • вручную подключиться к postgres из оболочки через psycopg2, запустил connection.rollback () и connection.commit ()

но ошибка сохраняется.

Приветствуются любые идеи о том, что можно сделать!

Приветствия,

Хофф

1 Ответ

2 голосов
/ 20 ноября 2011

Я обновил проблему с sqldiff, вызвав аналогичные проблемы. Лучше всего, вероятно, получить расширения django из репозитория github и провести небольшое расследование. Отредактируйте sqldiff.py и закомментируйте код транзакции для метода find_differences :

#    @transaction.commit_manually
def find_differences(self):
...
#                transaction.rollback()  # reset transaction
...
#                transaction.commit()

Теперь ваша настоящая проблема должна быть раскрыта, а не скрываться за исключением транзакции.

...