我有一個基於Django的web應用程序,它使用PostgreSQL作爲後端通過psycopg2。現在我們正在使用postgres 8.4.x,但將來會轉向9.1.x。我們正在使用Django的當前穩定版本(1.3.1)。在PostgreSQL上爲Django配置REPEATABLE READ或SERIALIZED事務隔離
我想在REPEATABLE READ或SERIALIZABLE級別啓用更嚴格的事務隔離(按照postgres docs)。從psycopg2源,可用的是:
"""Isolation level values."""
ISOLATION_LEVEL_AUTOCOMMIT = 0
ISOLATION_LEVEL_READ_UNCOMMITTED = 1
ISOLATION_LEVEL_READ_COMMITTED = 2
ISOLATION_LEVEL_REPEATABLE_READ = 3
ISOLATION_LEVEL_SERIALIZABLE = 4
不幸的是,Django的1.3.1的的_set_isolation_level()
psycopg2後端實現包括assert level in (0, 1)
這似乎用這種方法來設置隔離級別一樣高我希望立即排除。
在Django主幹的recent commit中,很高興地看到這個限制已經放寬到允許級別高達4,但是,仍然沒有通過普通的Django設置來選擇實際指示後端的選項您希望獲得比ISOLATION_LEVEL_READ_COMMITTED更高的隔離級別。換句話說,儘管_set_isolation_level()
現在可以接受高達4的級別,但沒有基於配置的方式來實際使其以4作爲參數被調用。
問題:
假設我願意開始使用Django的devel的版本,以獲得這種變化,什麼是正確的/推薦的方法來調用
_set_isolation_level()
手動鑑於存在,這將導致沒有任何配置選項在它被稱爲與我想要的隔離級別?假設我是而不是願意使用Django的開發版本,推薦使用Django 1.3.1將期望的隔離級別傳遞給psycopg2的方法是什麼?
Django的當前版本和未來版本是否使得難以指定這些更高的隔離級別,因爲它們會在實踐中造成巨大的問題? (即我應該這樣做嗎?)請記住,我們的應用程序具有相對較低的數據庫吞吐量,對於一致性要求非常高的大型不常見事務。
在此先感謝您的任何建議。
當然...做到了這一點,它似乎工作正常。需要一些額外的配置,使南不會嚇壞,但否則非常無痛。 – glenc