Одновременные индексы базы данных Rails 4

Мне просто интересно, как правильно вести себя при создании параллельных индексов в Rails.

Я использую это в своем файле миграции:

disable_ddl_transaction!

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

Это должно создать параллельный индекс postgres.

У меня вопрос: при запуске rake db:migrate правильно ли ждать создания индекса? Я имею в виду, миграция будет ждать, пока не будет создан индекс? Или это должно закончиться и делегировать эту ответственность postgres?

P.S. Это действительно большой показатель.


person Ron    schedule 28.10.2013    source источник
comment
Вы используете для этого специальный драгоценный камень?   -  person Peter Brown    schedule 28.10.2013
comment
Нет. Это встроено в Rails 4 @beerlington. Тем не менее, я уже протестировал доступ к таблице, для которой создаю индекс. Я могу писать и читать, когда задача запущена (примерно 2 минуты). Это говорит мне, что создание параллелизма работает правильно, но я просто хочу убедиться.   -  person Ron    schedule 28.10.2013


Ответы (1)


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

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

person Ron    schedule 11.11.2013
comment
Это не сработало для меня, как ожидалось. Индексация 10 миллионов строк заблокировала базу данных на Rails 4.0.8. - person Ponny; 14.07.2014
comment
@Ponny для Rails 4.0.8 они внесли некоторые изменения в ActiveRecord, но в отношении некоторых типов данных. Это все еще должно работать для этой версии. Я только что сделал это недавно на 4.0.5 - person Ron; 14.07.2014
comment
Нашел проблему. Добавлял столбцы и несколько индексов. Некоторое чтение предложило мне поместить параллельный индекс в его собственную миграцию. Затем работал нормально на 30-миллионных строках на SSD. Заняло 20 минут и не было никаких проблем/блокировок. - person Ponny; 11.12.2014
comment
@Понни молодец! И да, рекомендуется размещать индексы в собственных миграциях. Даже больше, если они являются параллельными индексами. - person Ron; 11.12.2014