Как сбросить индексы БД перед массовой загрузкой в ​​seed.rb? - PullRequest
3 голосов
/ 05 октября 2011

В моем приложении rails у меня есть скрипт seed.rb, который вставляет множество записей. На самом деле я пытаюсь загрузить 16 миллионов из них. Это занимает много времени.

Одна вещь, которую я хотел попытаться ускорить, это удалить индексы таблицы и добавить их потом . Если мне кажется, что я делаю что-то безумное, пожалуйста, дайте мне знать, но это, похоже, одна рекомендация для массовой загрузки в postgres

Я использую команды add_index и remove_index при переносе, но тот же синтаксис не работает в файле seed.rb. Возможно ли это сделать вне миграции? (Я полагаю, что это не лучшая практика, потому что это представляет изменение схемы)

рельсы v2.3.8, postgres v8.4.8

1 Ответ

3 голосов
/ 05 октября 2011

Одна из возможностей - просто потакать небольшому необработанному SQL в пределах seed.rb

ActiveRecord::Base.connection.execute("DROP INDEX myindex ON mytable")

При 16 миллионах записей я бы порекомендовал управлять всем этим с помощью необработанного SQL (содержащегося в seed.rb, если вылайк).Все 16 миллионов записей попадают в одну таблицу?Должна быть некоторая магия PostgreSQL для массового импорта файла (в определенном формате PostgreSQL) в таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...