프로덕션 레벨에서 동기화는 위험함.
그래서 마이그레이션을 씀.
마이그레이션은 데이터베이스 스키마 업데이트를 위한 단일 파일이다.
그리고 스키마 변화가 생기면 이미 존재하는 데이터베이스 구조를 업데이트 할 수 있다.
typeorm migration:create ./path-to-migrations-dir/PostRefactoring
import { MigrationInterface, QueryRunner } from "typeorm"
export class PostRefactoringTIMESTAMP implements MigrationInterface {
async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "post" RENAME COLUMN "title" TO "name"`,
)
}
async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`ALTER TABLE "post" RENAME COLUMN "name" TO "title"`,
) // reverts things made in "up" method
}
}
각 마이그레이션 파일에는 두 가지 메소드가 포함되어 있습니다:
up(queryRunner: QueryRunner): 이 메소드에는 마이그레이션을 수행하는 데 필요한 SQL 쿼리 또는 작업이 포함되어야 합니다.
down(queryRunner: QueryRunner): 이 메소드에는 up 메소드에서 변경한 내용을 취소하는 SQL 쿼리 또는 작업이 포함되어야 합니다. 필요할 때 마지막 마이그레이션을 되돌릴 수 있습니다
typeorm migration:run -- -d path-to-datasource-config
여기서 -d 옵션은 --dataSource
typeorm migration:run --fake
typeorm migration:revert --fake

typeorm migration:generate PostRefactoring -d path-to-datasource-config
generate를 통해 차이를 자동으로 인지하고 마이그레이션을 생성한다. {TIMESTAMP}-PostRefactoring.ts