Миграция

data-source.ts - файл нужен для TypeORM CLI, чтобы он знал, как подключаться к базе и где искать entity.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// src/data-source.tsimport { DataSource } from "typeorm";import { config } from "dotenv"; config(); export default new DataSource({ type: "postgres", host: process.env.DB_HOST, port: parseInt(process.env.DB_PORT || "5432") username: process.env.DB_USERNAME, password: process.env.DB_PASSWORD || "", database: process.env.DB_NAME, entities: ["src/**/*.entity.ts"], migrations: ["src/migrations/*.ts"], synchronize: false, logging: true,});

Важно:

  • entities: ["src/**/*.entity.ts"] - подхватит все entity автоматически
  • synchronize: false - в проде должно быть false всегда!

synchronize: true vs false

  • synchronize: true - Автоматом обновляет базу при изменении entity
  • synchronize: false - Ты сам контролируешь изменения через миграции

Команды для миграций

1
2
3
4
5
6
7
8
9
10
{ "scripts": { "typeorm": "ts-node ./node_modules/typeorm/cli.js", "migration:show": "npm run typeorm -- migration:show -d src/data-source.ts", "migration:generate": "npm run typeorm -- migration:generate -d src/data-source.ts", "migration:run": "npm run typeorm -- migration:run -d src/data-source.ts", "migration:revert": "npm run typeorm -- migration:revert -d src/data-source.ts", "migration:create": "ts-node ./node_modules/typeorm/cli.js migration:create" }}
  • npm run migration:show - Показывает статус всех миграций
  • npm run migration:generate -- src/migrations/Name - Авто-генерация миграции (сравнивает entity с БД)
  • npm run migration:create -- src/migrations/Name - Создать пустую миграцию (писать руками)
  • npm run migration:run - Применить все невыполненные миграции
  • npm run migration:revert - Откатить последнюю миграцию