마이그레이션 개요
자동 생성
Entity → Migration 수동 작성 불필요
버전 관리
타임스탬프 기반 순차 실행 보장
Up/Down
적용과 롤백 양방향 지원
Knex 기반
표준 Knex API 호환성 보장
마이그레이션 생성 흐름
Entity에서 Migration으로
1. Entity 정의
2. 자동 생성된 Migration
Migration 파일명:
{타임스탬프}_{작업}_{테이블명}.ts - 타임스탬프: YYYYMMDDHHmmss 형식 - 작업:
create, alter, foreign, drop 등 - 테이블명: 언더스코어 구분Migration 파일 구조
up 함수 - 변경 적용
down 함수 - 변경 롤백
생성되는 Migration 유형
CREATE TABLE
ALTER TABLE - 컬럼 추가
ALTER TABLE - 컬럼 삭제
FOREIGN KEY 추가
데이터베이스 비교
Sonamu는 현재 DB 스키마와 Entity를 비교하여 차이점을 감지합니다:비교 대상
- 테이블: 존재 여부, 이름
- 컬럼: 타입, 길이, nullable, default
- 인덱스: unique, index, 복합 인덱스
- 외래 키: 참조 테이블, onUpdate, onDelete
- 제약 조건: CHECK, DEFAULT 등
차이점 감지
Migration 실행 순서
1. 타임스탬프 기반 정렬
2. 의존성 고려
실행 추적
knex_migrations 테이블
Knex는 실행된 Migration을 추적합니다:- batch: 함께 실행된 그룹 (롤백 단위)
- migration_time: 실행 시간
Entity 타입별 Migration
기본 타입
관계 타입
인덱스
where는 PostgreSQL partial index를 만들기 위한 raw SQL predicate입니다. Sonamu는 DB
introspection으로 읽은 predicate와 entity.json의 predicate를 비교하여 같은 조건이면 추가 migration을
생성하지 않습니다.
고급 기능
Generated 컬럼
전문 검색 인덱스
벡터 검색 인덱스
다음 단계
마이그레이션 생성
Sonamu UI에서 생성하기
마이그레이션 실행
migrate run 명령어
롤백하기
변경 사항 되돌리기
Entity 정의
Entity 구조 이해하기