2012-02-06 532 views
1

我有一個包含靜態數據(用戶角色)的Rails應用程序中的小表。它不應該改變。我想知道是否有可能鎖定表以防止任何人(即開發人員)在生產中意外更改它。我可以在Rails中鎖定表嗎? (我應該嗎?)

或者我應該沒有把這些數據放入數據庫嗎?是否應該在某處進行硬編碼,以便使編輯變得更加困難,並且至少可以審計(git blame)?

回答

1

正確的做法是使用權限。將表的所有權更改爲另一個用戶,並僅授予生產數據庫用戶SELECT。

我會說這些類型的東西正確的地方可能是數據庫。這樣,如果他們需要更改,可以在數據庫中更改它們,並且不必重新部署應用程序(假設它會注意到更改)。

你沒有問這個問題,但是你的措辭讓我想起了,所以我會說:無論如何你永遠不需要明確LOCK一個PostgreSQL表。如果你認爲這是你需要做的事情,你應該確保你擔心的事情可以在MVCC下實際發生,並且交易不會爲你做正確的事情。

+0

我使用Heroku,所以我認爲創建一個新的數據庫用戶可能是不可能的。我會檢查。而且我們確實有一種情況,那就是靜態表被意外更改,因此我希望避免再次出現這種情況。謝謝! – pcg79 2012-02-07 14:54:42

0

您可以使用觸發器來防止更新表(假設您無法添加新的db用戶)。

或者,使用視圖並確保所有讀取請求都通過它。 (可能通過去除對應表中的ActiveRecord類

相關問題