Большая часть моего опыта с Django к настоящему времени была с MySQL и mysqldb. Для нового приложения я пишу, я опускаю палец ноги в воду PostgreSQL, теперь, когда я видел свет.
В то время как запись данных импортирует сценарий, я наткнулся на проблему с поведением автоматической фиксации по умолчанию. Я предположил бы, что существуют другие "глюки", которые могли бы неожиданно возникнуть. В поисках чего еще я должен быть?
Существует несоответствие между автокоммитом Django и стандартным режимом фиксации PostgreSQL.
Из коробки Django использует стандартный режим PostgreSQL "read committed", который объединяет все операции в одну транзакцию, которая заканчивается, когда курсор db выходит из области видимости. Проблема возникает, когда во время этой серии операций происходит ошибка. Postgres ожидает, что вы сделаете откат перед продолжением, и если вы этого не сделаете, psycopg2 выбросит InternalError в следующий раз, когда вы попытаетесь использовать соединение. Если вы полагаетесь на автокоммит в Django (по умолчанию), то, скорее всего, откат не будет выполнен должным образом.
К счастью, psycopg2 поддерживает другой режим работы, называемый "autocommit", в котором он не устанавливает эти транзакции. Для тех, кто пришел из MySQL (или пытается поддерживать оба варианта), это вносит некоторую долю здравомыслия в мир. В версии 1.1 они добавили поддержку, чтобы показать это. Добавьте следующее в ваши настройки (нужно изменить для 1.2 синтаксиса, если вы на trunk)
DATABASE_OPTIONS = {
"autocommit": True,
}
Обсуждение для Django ticket #3460 излагает детали.