Идея использования миграции заключается в том, что они являются король вашей базы данных. Это единственное, что изменяет вашу схему базы данных, и единственный способ изменить схему базы данных - просто запустить миграцию.
В ответ на вопросы:
1. Автоматическое создание файла миграции, глядя на модели
Не. Вручную создайте миграцию. Если вы меняете столбцы конкретной таблицы, сначала выполните миграцию, а затем измените соответствующую модель. Миграции - это король базы данных. Модели заняли второе место.
2. Автоматическое создание файла миграции на основе новых изменений, внесенных в модель
не делать. То же, что и выше.
3. Генерирование SQL скрипт миграции, так что мы можем запустить это на PROD
Не. Вы должны просто иметь возможность запускать сами миграции непосредственно на производстве, подключаясь к производственной базе данных, точно так же, как вы их запускали в dev, с sequelize db:migrate
. Ваш сценарий развертывания должен автоматически запускать sequelize db:migrate
в производственной базе данных каждый раз, когда вы нажимаете новый код на производство.
4. Окружающая среда конкретные миграции (Dev, Стадия, Prod)
Определенно нет. Каждая миграция должна выполняться в каждой среде. Ваша база данных должна иметь одну и ту же схему независимо от среды.
Update: Вот пример migartion, который работает (и работает вверх и вниз), чтобы добавить новый столбец булево:
'use strict';
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.addColumn(
'my_table',
'my_new_column',
{
type: Sequelize.BOOLEAN,
}
)
},
down: function (queryInterface, Sequelize) {
return queryInterface.removeColumn('my_table', 'my_new_column')
}
};
спасибо так много @ joshua.paling теперь я имею хорошее представление о sequelize миграций и I понять мою роль в этом. Теперь, когда я начну миграцию, я вижу два способа. 1. Использование сценариев seelize 2. Sql. Я думаю, что второй подход будет более чистым, поскольку я буду писать sql-запросы в противовес api .. поскольку api не хорошо документированы, я не уверен, что их можно использовать.Я попробовал один перенос, используя api, когда я добавил столбец в таблицу. Но когда я пытаюсь его отменить ... миграция не удалила столбец. Это заставило меня задуматься о sql-запросах. Cn u plz предложите свою рекомендацию по этому вопросу –
В идеале вы должны использовать sequelize API. Основное преимущество этого заключается в том, что ваши миграции должны работать независимо от используемой вами базы данных (например, MySQL, Postgres и т. Д.). Если API-интерфейс secelize не поддерживает то, что вы хотите сделать, то писать простой SQL в порядке. Что касается обновления и удаления столбца, я обновляю свой ответ с помощью примера migartion, который работает для меня. –
Большое спасибо @ joshua.paling. Я очень ценю ваши усилия. И я согласен с тем, что когда-либо кажется, что трюки для написания миграций с использованием API, мы должны использовать простой SQL. Еще раз спасибо ! :) –