0

我只是想知道什麼是在Rails中創建併發索引時的正確行爲。Rails 4併發數據庫索引

我在我的移民文件中使用這樣的:

disable_ddl_transaction! 

def change 
    add_index :table_name, :field_name, algorithm: :concurrently 
end 

這應該創建一個Postgres併發指數。

我的問題是:運行時rake db:migrate正確的行爲是否等待創建索引?我的意思是,遷移將等待索引創建?或者它應該結束並委託postgres的責任?

P.S.這是一個非常大的指數。

+0

您是否在使用特殊的寶石? –

+1

不。這是內置於Rails 4 @beerlington中的。不過,我已經測試了我創建索引的表格的訪問權限。我可以在任務運行時寫入和讀取(它需要2分鐘的時間)。這告訴我併發創建工作正常,但我只想確保。 – Ron

回答

1

我發現這是正確的行爲。 無論遷移是否在等待,索引都將按預期併發創建。

創建時允許寫入和讀取。

+0

這不適合我的預期。索引10百萬行鎖定Rails 4.0.8上的數據庫。 – Ponny

+0

@Ponny for Rails 4.0.8他們在ActiveRecord中做了一些修改,但是關於一些數據類型。這應該仍然適用於該版本。我剛剛在4.0.5上做了它 – Ron

+0

發現了這個問題。是添加列和多個索引。一些閱讀建議我將併發索引放入其自身的遷移中。工作得很好,然後在SSD上的30萬行。花了20分鐘,沒有問題/鎖。 – Ponny