2017-05-29 27 views
0

我正在開發一個Django應用程序。我想通過讀取,計算和插入許多表來改變數據庫狀態。這是一個原子程序,它不能只是「單線程」,因爲結果狀態取決於執行這些程序的順序。在Postgres中鎖定表以允許其他交易讀取,但不允許寫入

爲此,我將芹菜與一名工人一起使用。我想到了在Postgres的序列化隔離級別,直到我讀:

序列化交易是保證產生相同的效果一些爲了

但我不運行它們每次一個需要一些,我需要確切順序,這就是爲什麼我選擇了消息隊列。

在該過程中,我想禁止寫入我完全操作的表格,但仍然允許閱讀。什麼最低限制性的鎖定模式適合我的情況?

回答

0

如果我沒有理解你的問題的權利,你想:

lock table_name in exclusive mode; 

https://www.postgresql.org/docs/current/static/sql-lock.html https://www.postgresql.org/docs/current/static/explicit-locking.html

EXCLUSIVE

衝突與ROW SHARE,ROW EXCLUSIVE,SHARE UPDATE EXCLUSIVE, SHARE ,共享行EXCLUSIVE,EXCLUSIVE和ACCESS EXCLUSIVE鎖 模式。該模式只允許併發訪問共享鎖,即只有 讀取表可以與持有此鎖定模式的事務 並行進行。

其他會話將以讀取表的狀態讀取它在啓動事務並鎖定表之前的狀態。嘗試寫入表格會使會話等待您的交易完成

+0

謝謝。我已閱讀過這些文檔,現在認爲SHARE的限制較少。 – salairsky