Structure_dump и Structure_load - PullRequest
1 голос
/ 04 июля 2019

Я не понимаю, когда мы будем использовать structure_dump и structure_load. В документации Rails нет информации:

ActiveRecord::Tasks::DatabaseTasks::structure_load

ActiveRecord::Tasks::DatabaseTasks::structure_dump

Может кто-нибудь подробно объяснить эти методы?

1 Ответ

2 голосов
/ 04 июля 2019

Сначала я сошлюсь на некоторую документацию по Rails, которая может быть более полезной.Эта документация о заданных по умолчанию рейк-задачах Rails, которые используют методы, о которых вы спрашивали:

Типы дампов схемы Rails (Направляющие рельсов Rails)

Полагаю, вызнакомы с файлом Rails db/schema.rb.Этот файл по сути является большим «миграционным» файлом, который содержит некоторый код Ruby, который можно запустить, который создаст все необходимые таблицы и индексы в вашей базе данных.Это то, что происходит, когда вы запускаете rake db:schema:load.

. Мы можем использовать rake db:schema:dump, чтобы по существу взять состояние базы данных и перевести его непосредственно в файл schema.rb.Нам может потребоваться сделать это, если у нас нет файлов миграции, и у нас нет существующего файла schema.rb.В некоторых случаях (не очень много) ActiveRecord испытывает проблемы с правильным «преобразованием» схемы базы данных непосредственно в код Ruby.ActiveRecord не может переводить определенные функции / опции, включая, но не ограничиваясь:

structure_dump и сопутствующее ему рейк-задание db:structure:dump существуют для решения этой проблемы.Вместо того, чтобы запрашивать у адаптера базы данных ActiveRecord дамп в файл schema.rb, содержащий код Ruby, он вместо этого использует базовые инструменты управления базой данных для дампа в файл structure.sql, содержащий большой список операторов SQL.Обычно проще «представить» схему базы данных в необработанном SQL, вместо того чтобы сначала переводить ее в код Ruby.Полученный файл structure.sql теперь можно использовать для воссоздания схемы / структуры базы данных одним из двух способов:

  • Запустить содержимое db/structure.sql в приглашении SQL или в некоторыхпуть, который напрямую оценивается вашей системой управления базами данных

  • Запустите грабли db:structure:load.Он будет читать из db/structure.sql и оценивать его содержимое как необработанный SQL, но через ActiveRecord - очень похоже на db:schema:load.


TLDR: ИногдаActiveRecord сложно выгружать схему непосредственно в код Ruby, поэтому structure_dump позволяет создавать дамп в сыром SQL.Этот SQL можно запустить для воссоздания схемы базы данных так же, как и schema.rb для воссоздания схемы базы данных.Вы можете загрузить его в базу данных как сырой SQL или запустив задачу rake db:structure:load.

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