Применение миграций в Nest
Пусть файлы шагов уже лежат в проекте, а PostgreSQL ещё не знает, какие из них уже выполнялись. Без учёта порядка и журнала одни и те же правки могут накладываться повторно.
Отдельный источник данных
для CLI хранит параметры
соединения, список сущностей
и каталог миграций. При
synchronize со значением
false приложение само
таблицы не трогает: схему
меняют только команды CLI.
Запуск выполнения шагов идёт
из корня после сборки, потому
флаг источника указывает
на собранный файл настроек.
Покажем на примере постов:
import { DataSource } from 'typeorm';
export default new DataSource({
type: 'postgres',
host: 'localhost',
port: 5432,
username: 'postgres',
password: 'postgres',
database: 'site',
synchronize: false,
entities: ['dist/**/*.entity.js'],
migrations: ['dist/migrations/*.js'],
});
В файле миграции тела методов можно оставить пустыми: для первого прогона важнее источник и команда выполнения:
import { MigrationInterface, QueryRunner } from 'typeorm';
export class CreatePosts1730000000000 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
}
public async down(queryRunner: QueryRunner): Promise<void> {
}
}
После сборки проекта выполняют накопившиеся шаги:
npx typeorm migration:run -d dist/data-source.js
Настройте источник данных с выключенной автосинхронизацией и выполните накопившиеся шаги схемы для проекта работников.