Как выполнить миграцию базы данных в LoopBack 4 - PullRequest
1 голос
/ 09 июля 2020

Когда приложение находится в стадии производства и ему необходимо внести изменения в таблицы, я полагаю, что выполнение automigrate не может быть и речи, поскольку оно удаляет все данные в изменяемых таблицах. Было бы уместно ввести autoupdate, но меня беспокоит масштабируемость. Безопасно ли полагаться на autoupdate на продукте на стадии производства? Одним из преимуществ миграций, подобных Rails, является ведение записи изменений, чтобы гарантировать, что каждый экземпляр или среда базы данных будут находиться в одной и той же схеме. Есть ли какой-либо хорошо разработанный способ добиться этого в LoopBack?

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

1 Ответ

1 голос
/ 24 июля 2020

Привет от команды LoopBack ?

Было бы уместно выполнить автоматическое обновление, но меня беспокоит масштабируемость. Безопасно ли полагаться на автоматическое обновление продукта на стадии производства? Одним из преимуществ миграций, подобных Rails, является ведение записи изменений, чтобы гарантировать, что каждый экземпляр или среда базы данных будут находиться в одной и той же схеме. Есть ли какой-нибудь хорошо разработанный способ добиться этого в LoopBack? рискованно. Мы обсуждаем более надежную структуру в выпуске GitHub loopback-next # 487 , не стесняйтесь присоединиться к нашим усилиям! Один из членов сообщества упомянул сторонний пакет loopback4-migration , вы можете проверить его.

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

Я боюсь, что текущий дизайн автоматического переноса / автообновления не поддерживает пользовательские преобразования данных как часть миграции базы данных. Возможный вариант - перезаписать app.migrateSchema, чтобы запустить дополнительную команду базы данных до или после выполнения автоматической миграции.

class MyApplication extends RepositoryMixin(RestApplication) {
 async migrateSchema(options: SchemaMigrationOptions = {}): Promise<void> {
   // add code to normalize data before column definitions are changed
   await super.migrateSchema(options);
   // add code to normalize data after column definitions were changed
  }
}
...