Ошибка транзакции Python PostgreSQL - PullRequest
0 голосов
/ 11 апреля 2011

Я пытаюсь использовать ORM в Django для обработки данных с помощью бэкэнда PostgreSQL.Исходя из первичной записи, создайте сотни записей в связанной таблице, но если возникнут какие-либо ошибки, я хочу откатить все записи.Поэтому у меня весь процесс заключен в ручную транзакцию.

@transaction.commit_manually(main_record)
def save_data(data):
    try:
        create lots of records -> .save()
    except Exception, e:
        print 'Unexpected Error: %s' % e
        transaction.rollback()
        raise
    else:
        print 'Saving...'
        try:
            imgObj.processed = True
            main_record.save()
            transaction.commit()
            print 'Saved!'
        except Exception, e:
            print 'Unexpected Error during commit: %s' % e
            raise

Однако, когда я пытаюсь выполнить commit (), он выдает исключение «Операция ввода-вывода для закрытого файла».Googling находит несколько упоминаний об этом, но не так много в отношении PG, и никаких решений.Что это значит?

Редактировать: Я также заметил, что когда это происходит, есть также процесс postgres, помеченный именем моей базы данных и статусом "IDLE в транзакции".Должен ли я закончить этот процесс?

1 Ответ

2 голосов
/ 11 апреля 2011

Если вы не запускаете это на сервере разработки, то ошибка, скорее всего, связана с вашими утверждениями «print». Например, при запуске из Apache через mod_wsgi дескрипторы файла stdout закрываются, поэтому вы не можете «печатать» как обычно.

...