# Migrations — NestJS: Scalable Node.js APIs बनाना

Source: https://www.skillbyai.com/hi/nestjs/nestjs-migrations

> TypeORM migrations से database schema को version करें: generate, run और custom SQL बदलाव लिखें।

## Migrations generate और run करें

TypeORM CLI entity changes के आधार पर migrations generate करता है; database को update करने के लिए run करें।

```bash
npx typeorm migration:generate ./src/migrations/CreateUserTable
npx typeorm migration:run
```

## Manual migration

Complex schema changes के लिए custom SQL migration लिखें।

```typescript
import { MigrationInterface, QueryRunner } from 'typeorm';

export class CreateUserTable123456 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query('CREATE TABLE user (id SERIAL PRIMARY KEY, name VARCHAR NOT NULL)');
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query('DROP TABLE user');
  }
}
```

## production में synchronize कभी नहीं

`synchronize: true` entities से मिलाने के लिए columns drop कर सकता है। इसे सिर्फ़ local में use करें; production में reviewed migrations चलाएँ।

त्वरित जाँच

**Quiz:** database हाथ से बदलने की जगह migration क्यों बनाएँ?

- [ ] migrations queries तेज़ करते हैं
- [x] बदलाव versioned, reviewable और हर environment में दोहराने योग्य होते हैं
- [ ] TypeORM manual SQL मना करता है

*Answer:* बदलाव versioned, reviewable और हर environment में दोहराने योग्य होते हैं. migration files git में रहती हैं और dev, staging, prod में एक जैसे चलती हैं।
