2010-04-10 24 views
6

到目前爲止,我對Django的大部分經驗都是使用MySQL和mysqldb。對於我正在寫的一個新應用程序,我正在將腳趾浸入PostgreSQL水中,現在我已經有了seen the lightDjango用戶在從MySQL遷移到PostgreSQL時應該知道什麼?

在編寫數據導入腳本時,我偶然發現了默認自動提交行爲的問題。我猜想還有其他可能會出現的「陷阱」。我還應該尋找什麼?

+0

感謝您提出這個問題 - 我正在考慮遷移到PostgreSQL,並且也會遇到這些問題,但不知道它們是什麼。 – 2010-04-10 18:08:10

回答

11

Django的自動提交和默認的PostgreSQL提交模式之間存在不一致。

Django採用默認的PostgreSQL模式「讀取已提交」,它將所有操作合併爲單個事務,該事務在db光標超出範圍時結束。在這一系列操作中發生錯誤時會出現問題。 Postgres希望在繼續之前發出回滾,如果不這樣做,psycopg2會在下一次使用連接時拋出InternalError。如果您依賴Django自動提交(默認),則可能無法正確回滾。

幸運的是,psycopg2支持另一種稱爲「autocommit」的操作模式,其中它不會設置這些事務。對於那些來自MySQL(或試圖支持這兩者)的人來說,這給世界帶來了一些理智。在1.1中,他們增加了支持來揭露它。以下添加到您的設置(需要爲1.2 syntax改變,如果你在主幹)

DATABASE_OPTIONS = { 
    "autocommit": True, 
} 

Django的車票#3460的討論勾畫出了堅韌不拔的細節。