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