Migration SQL
Ainecto는 다이어그램의 두 버전을 비교해 migration SQL을 자동 생성할 수 있습니다. ALTER TABLE 문을 손으로 작성하는 대신 스키마 스냅샷 diff를 기반으로 DDL을 만들 수 있습니다.
동작 방식
- History 사이드바 패널을 엽니다.
- 비교할 두 버전을 선택합니다. 하나는 source(이전), 하나는 target(이후)입니다.
- Compare Versions를 클릭해 side-by-side diff를 확인합니다.
- Generate Migration SQL 버튼을 클릭합니다.
- target dialect를 선택합니다.
- 생성된 SQL을 검토합니다.
- Copy 버튼으로 clipboard에 복사합니다.
Migration SQL은 source schema를 target schema로 바꾸는 데 필요한 최소 DDL statement 집합을 표현합니다.
지원 작업
Generator는 다음 변경을 감지하고 SQL을 만듭니다.
Tables
| 변경 | 생성 SQL |
|---|---|
| 테이블 추가 | CREATE TABLE |
| 테이블 삭제 | DROP TABLE |
| 테이블 이름 변경 | ALTER TABLE ... RENAME |
Columns
| 변경 | 생성 SQL |
|---|---|
| 컬럼 추가 | ALTER TABLE ... ADD COLUMN |
| 컬럼 삭제 | ALTER TABLE ... DROP COLUMN |
| 컬럼 이름 변경 | ALTER TABLE ... RENAME COLUMN |
| 타입 변경 | ALTER TABLE ... ALTER COLUMN TYPE 등 dialect별 구문 |
| nullable 변경 | SET NOT NULL / DROP NOT NULL |
| 기본값 변경 | SET DEFAULT / DROP DEFAULT |
Relationships and indexes
| 변경 | 생성 SQL |
|---|---|
| FK 추가/삭제 | ADD CONSTRAINT / DROP CONSTRAINT |
| index 추가/삭제 | CREATE INDEX / DROP INDEX |
| unique 변경 | unique index 또는 constraint 변경 |
지원 dialect
- MySQL / MariaDB
- PostgreSQL
- Oracle
- SQL Server
각 dialect는 identifier quoting, auto-increment syntax, 타입 변경 syntax가 다릅니다. Ainecto는 선택한 dialect에 맞춰 출력합니다.
예시
-- Migration from v3 to v5
ALTER TABLE "orders" ADD COLUMN "discount_code" VARCHAR(50);
ALTER TABLE "orders" DROP COLUMN "legacy_status";
ALTER TABLE "products"
ADD CONSTRAINT "fk_products_category"
FOREIGN KEY ("category_id") REFERENCES "categories" ("id");
CREATE INDEX "idx_orders_created_at" ON "orders" ("created_at");
팁
- 큰 변경 전에는 버전을 저장하세요. migration 도구는 비교할 스냅샷이 최소 두 개 필요합니다.
- 실행 전 반드시 검토하고 staging database에서 테스트하세요.
- copy 버튼을 사용하면 전체 SQL을 database client나 migration 파일에 바로 붙여 넣을 수 있습니다.
- 버전 기록과 함께 쓰면 스키마 변경 타임라인을 명확하게 관리할 수 있습니다.