Что должен знать пользователь Django при переходе с MySQL на PostgreSQL? - PullRequest
6 голосов
/ 10 апреля 2010

Большая часть моего опыта работы с Django до сих пор была с MySQL и mysqldb.Для нового приложения, которое я пишу, я погружаю свой палец в воду PostgreSQL, теперь, когда я увидел свет .

Во время написания сценария импорта данных я наткнулся напроблема с автоматическим поведением по умолчанию.Я предполагаю, что есть и другие "ошибки", которые могут возникнуть.Что еще я должен быть в поисках?

1 Ответ

11 голосов
/ 10 апреля 2010

Существует несоответствие между автоматической фиксацией Django и режимом фиксации PostgreSQL по умолчанию.

Из коробки Django использует режим PostgreSQL по умолчанию «read commit», который объединяет все операции в одну транзакцию, которая завершается, когда курсор db выходит из области видимости. Проблема возникает, когда во время этой серии операций возникает ошибка. Postgres ожидает, что вы произведете откат, прежде чем продолжить, и, если вы этого не сделаете, psycopg2 выдает InternalError при следующем использовании соединения. Если вы полагаетесь на автокоммит Django (по умолчанию), вы, вероятно, не будете выполнять откат должным образом.

К счастью, psycopg2 поддерживает другой режим работы, называемый «автокоммит», при котором эти транзакции не устанавливаются. Для тех, кто прибывает из MySQL (или пытается поддержать оба), это приносит некоторое здравомыслие миру. В 1.1 они добавили поддержку, чтобы выставить это. Добавьте следующее в свои настройки (необходимо изменить для 1.2 синтаксиса , если вы находитесь на внешней линии)

DATABASE_OPTIONS = {
    "autocommit": True,
}

Обсуждение билета Django # 3460 раскрывает мельчайшие детали.


...