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 минуты aprox.). Это говорит мне, что создание параллелизма работает правильно, но я просто хочу убедиться. – Ron

ответ

1

Я выяснил, что это правильное поведение. Независимо от того, что миграция ожидает, индекс будет создан одновременно, как и ожидалось.

Запись и чтение разрешены во время создания.

+0

Это не сработало для меня, как и ожидалось. Индексирование 10 миллионов строк заблокировало базу данных на Rails 4.0.8. – Ponny

+0

@Ponny for Rails 4.0.8 они внесли некоторые изменения в ActiveRecord, но в отношении некоторых типов данных. Это должно по-прежнему работать для этой версии. Я недавно сделал это на 4.0.5 – Ron

+0

Нашел вопрос. Добавляли столбцы и несколько индексов. В некотором чтении я предположил, что я ставлю параллельный индекс в свою собственную миграцию. Работал отлично, а затем на 30-миллиметровых рядах на SSD. Взял 20 минут и не имел проблем/замков. – Ponny