2016-10-07 66 views
3

我不知道我是否應該問這個問題上的SO與否。但我不得不因爲我對我的懷疑沒有清楚的想法。我被告知不要在rails migrations中設置默認值,而是在CTO的代碼審查中使用空值。他的解釋是這樣once the database gets huge enough, migrations with defaults runs slow and may throw database timeout errors。但是我認爲在數據庫層面上,執行它的初始設置足夠快。我對嗎?在加列遷移軌道 - 不應該使用默認值在軌遷移

回答

4

使用默認值,需要一定的時間,當表中的行數是巨大的。

這是由文件的Postgres給出一個提示:https://www.postgresql.org/docs/9.5/static/ddl-alter.html

提示:添加列具有默認需要更新表的每一行(存儲新的列值)。但是,如果沒有指定默認值,PostgreSQL能夠避免物理更新。因此,如果您打算使用大多數非默認值填充列,最好添加沒有默認值的列,使用UPDATE插入正確的值,然後添加任何所需的默認值,如下所述。

0

看這個樣子.. 'NULL'的大小與默認值的大小相比,以字節爲單位。

這種差異的可能以KB或更低,但在數據庫的大小大,這將有事半功倍的效果數據的幾行。 因此,在遷移過程中,默認值選項肯定需要做更多的工作。

的停機時間(或遷移)時間可以是在許多情況下關鍵的,因此,DBA和開發者的其作用,保證可用資源的最佳使用,這包括時間。

你可能喜歡這種使用虛擬數據庫和更清晰基準工具來評估。