Что пользователь Django должен знать при перемещении от MySQL до PostgreSQL?

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

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

6
задан tmitchell 10 April 2010 в 18:16
поделиться

1 ответ

Существует несоответствие между автокоммитом 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 излагает детали.


11
ответ дан 9 December 2019 в 22:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: