Поиск по сайту
Ctrl + K
Вопросы по Nest.js

Какова роль миграционных скриптов в TypeORM и как создать и запустить миграции в приложении NestJS?

Миграционные скрипты в TypeORM играют важную роль в управлении изменениями в структуре базы данных в течение жизненного цикла приложения. Миграции позволяют вам отслеживать изменения схемы базы данных и применять их последовательно в различных средах (например, на локальном компьютере разработчика, в тестовой среде и на сервере).

Зачем нужны миграции?

  • Версионность схемы: Миграции позволяют обновлять и понижать версии схемы базы данных, записывая каждое изменение в виде отдельного скрипта.
  • Совместная работа: В команде разработчиков миграции помогают избежать конфликтов при изменении схемы базы данных.
  • Автоматизация развертывания: Миграции можно автоматически применять в процессе развертывания приложения, что упрощает управление обновлениями.
  • Как создать и запустить миграции в NestJS?

    Для работы с миграциями в NestJS вам потребуется настроенный проект с использованием библиотеки TypeORM. Перед началом убедитесь, что у вас установлены необходимые зависимости:

    npm install --save typeorm @nestjs/typeorm
    

    Шаг 1: Настройка подключения к базе данных

    В файле app.module.ts настройте подключение к базе данных, указав необходимые параметры:

    import { Module } from '@nestjs/common';
    import { TypeOrmModule } from '@nestjs/typeorm';
    
    @Module({
      imports: [
        TypeOrmModule.forRoot({
          type: 'postgres', // тип базы данных
          host: 'localhost',
          port: 5432,
          username: 'your_username',
          password: 'your_password',
          database: 'your_database',
          entities: [__dirname + '/**/*.entity{.ts,.js}'],
          migrations: [__dirname + '/migrations/**/*{.ts,.js}'],
          synchronize: false, // обязательно устанавливайте false при использовании миграций
        }),
      ],
    })
    export class AppModule {}
    

    Шаг 2: Создание миграции

    Чтобы создать новую миграцию, используйте команду CLI TypeORM или создайте файл миграции вручную. Пример создания миграции с помощью CLI:

    npx typeorm migration:create -n CreateUserTable
    

    Это создаст файл миграции в папке, указанной в параметре migrations. Откройте созданный файл и добавьте ваши изменения. Пример миграции для создания таблицы пользователей:

    import { MigrationInterface, QueryRunner, Table } from 'typeorm';
    
    export class CreateUserTable1612345678901 implements MigrationInterface {
      public async up(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.createTable(
          new Table({
            name: 'user',
            columns: [
              {
                name: 'id',
                type: 'int',
                isPrimary: true,
                isGenerated: true,
              },
              {
                name: 'name',
                type: 'varchar',
              },
              {
                name: 'email',
                type: 'varchar',
                isUnique: true,
              },
            ],
          }),
        );
      }
    
      public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.dropTable('user');
      }
    }
    

    Шаг 3: Запуск миграции

    После того как вы создали миграцию, вы можете ее запустить, используя следующую команду:

    npx typeorm migration:run
    

    Эта команда применит все миграции, которые еще не были выполнены.

    Шаг 4: Откат миграции

    Если вы хотите откатить миграцию, используйте команду:

    npx typeorm migration:revert
    

    Эта команда вернет последнюю выполненную миграцию.

    Заключение

    Использование миграций в TypeORM значительно упрощает процесс управления схемой базы данных. Это особенно полезно при работе над проектами в команде, так как позволяет поддерживать согласованность и упрощает работу с изменениями базы данных. Теперь, когда вы знаете, как создавать и управлять миграциями в NestJS, вы можете без опасений вносить изменения в структуру своей базы данных.