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