Как подготовить к работе БД PosgreSQL + TypeORM при первом деплое на продакшен-подобную среду?
B официальной документации NestJS рассмотрена конфигурация БД для режима локальной разработки:
import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
@Module({
imports: [
TypeOrmModule.forRoot({
type: 'mysql', // для PosgreSQL настройки аналочные
host: 'localhost',
port: 3306,
username: 'root',
password: 'root',
database: 'test',
entities: [],
synchronize: true,
}),
],
})
export class AppModule {}
при этом сказано, что на продакшене устанавливать synchronize значение true небезопасно.
Хорошо, а что делать-то? Если просто оставить это значение в положении false, то при попытке обращения к базе данных произойдёт ошибка:
ERROR [ExceptionsHandler] relation "XXX" does not exist
Короткий ответ на вопрос я знаю: "миграции". Но тут есть некоторые детали, без знания которых это волшебное слово сдвига с мёртвой точки не даст.
Во-первых: означает ли это, что нужно в приведённой выше конфигурации прописывать условную конструкцию, согласно которой запускать миграцию нужно на всех режимах кроме локальной разработки?
@Module({
imports: [
TypeOrmModule.forRoot({
// ...
synchronize: __IS_LOCAL_DEVELOPMENT_MODE__,
migrations: [
...__IS_LOCAL_DEVELOPMENT_MODE__ ? [] : [ CreateDataBaseMigration ]
]
}),
],
})
export class AppModule {}
Если да, то я так чувствую, что по мере добавления новых миграцией все эти условия будут становиться всё сложнее и сложнее.
Второе: если нам всё равно придётся создавать базу данных с помощью миграции, то зачем нам synchronize: true? Что отложить написание этой миграции на потом?