2011-08-12 16 views
1

我想運行(從Django的擴展命令)manage.py sqldiff MYAPP結束了,但我得到了以下錯誤:的Django/Postgres的:事務管理塊未決的COMMIT/ROLLBACK

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命令會窒息。我曾嘗試過:

  • restart postgres server
  • manually connect to postgres from shell via psycopg2, ran connection.rollback(), and connection.commit()

但是錯誤仍然存​​在。

歡迎任何關於可以做什麼的想法!

乾杯,

霍夫

回答

2

我更新了sqldiff造成類似問題的issue。你最好的選擇可能是從github repository獲得django-extensions並做一些調查。編輯sqldiff.py並註釋掉交易代碼裝飾find_differences方法:

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

現在你真正的問題應該被揭露出來,不再受交易異常掩蓋。