Notice
Recent Posts
Recent Comments
Link
250x250
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

혼자서 앱 만드는 개발자 함께하는 AI 세상

nextjs 랭체인Prisma Migrate로 개발 본문

nextjs 랭체인 챗봇만들기

nextjs 랭체인Prisma Migrate로 개발

혼앱사 2023. 8. 17. 22:46
반응형

https://www.prisma.io/docs/concepts/components/prisma-migrate

 

Prisma Migrate | Database, Schema, SQL Migration Tool

Prisma Migrate is a database migration tool available via the Prisma CLI that integrates with Prisma schema for data modeling.

www.prisma.io

https://www.prisma.io/docs/guides/migrate/developing-with-prisma-migrate

Prisma Migrate로 개발

이 가이드는 스키마 정의에서 소스 제어로의 마이그레이션 커밋에 이르기까지 Prisma Migrate를 사용한 일반적인 개발 워크플로를 안내합니다 . 이 가이드는 빈 데이터베이스에서 시작하지만 Prisma Migrate를 기존 프로젝트에 추가 할 수도 있습니다 .

개발 환경에서는 migrate dev명령을 사용하여 마이그레이션을 만들고 적용합니다.

 
$npx prisma migrate dev

프로토타이핑? 프로토타이핑db push 중이고 데이터 손실이나 다른 환경에서의 변경 사항 복제에 관심이 없는 경우 명령을 사용하십시오 . 변경 사항에 만족하면 마이그레이션 기록을 시작하거나 계속할 수 있습니다.

개발에서 Prisma Migrate를 사용하는 것이 편하다면 다음 고급 가이드를 고려하십시오.

이 가이드는 MongoDB에 적용되지 않습니다 .
대신에 가 migrate devMongoDB db push 사용됩니다 .

스키마 만들기

이 가이드에서는 다음 스키마를 시작점으로 사용합니다.

 
generator client {
provider = "prisma-client-js"
}
 
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
 
model User {
id Int @id @default(autoincrement())
name String
posts Post[]
profile Profile?
}
 
model Profile {
id Int @id @default(autoincrement())
biograpy String // Intentional typo!
userId Int @unique
user User @relation(fields: [userId], references: [id])
}
 
model Post {
id Int @id @default(autoincrement())
title String
published Boolean @default(true)
content String
authorId Int
author User @relation(fields: [authorId], references: [id])
categories Category[]
}
 
model Category {
id Int @id @default(autoincrement())
name String
posts Post[]
 
@@unique([name])
}

기본 유형 속성으로 스키마 구체화

Prisma Migrate는 기본 필드 유형 속성을 지원합니다. 생성해야 하는 기본 데이터베이스 유형을 지정할 수 있습니다.

예를 들어 PostgreSQL 공급자는 기본적으로 String에 매핑됩니다 text. 기본 매핑을 변경하려면:

  1. 기본 유형 주석을 추가하여 기본 데이터베이스에서 title필드를 a 로 만듭니다 .varchar(200)
  2.  
    // ...
     
    model Post {
    id Int @id @default(autoincrement())
    title String @db.VarChar(200)
    published Boolean @default(true)
    content String
    authorId Int
    author User @relation(fields: [authorId], references: [id])
    categories Category[]
    }
     
    // ...

섀도우 데이터베이스 구성

개발 환경에서만 Prisma Migrate는 임시 섀도우 데이터베이스를 사용하여 스키마 드리프트 감지와 같은 작업을 수행합니다.

마이그레이션 만들기

마이그레이션을 만들려면 스키마를 변경하고 다음 명령을 실행하여 마이그레이션을 만들고 적용합니다.

 
$npx prisma migrate dev

다음 예에서는 세 개의 마이그레이션이 포함된 마이그레이션 기록이 생성됩니다.

첫 마이그레이션: 마이그레이션 이력 초기화

다음 명령을 실행하여 마이그레이션 기록을 초기화하고 Prisma Migrate를 시작하십시오.

 
$npx prisma migrate dev --name first-migration
CLI 결과 표시

참고 : 를 제공하지 않으면 --namePrisma CLI에서 이름을 묻는 메시지를 표시합니다.

migrate dev명령을 처음 실행하면 Prisma Migrate가 다음을 수행합니다.

  • ./prisma/migrations초기 마이그레이션으로 폴더를 생성합니다 .
  •  
    migrations/
    └─ 20210305110829_first_migration/
    └─ migration.sql
  • _prisma_migrations첫 번째 마이그레이션 항목이 있는 데이터베이스에 이름이 지정된 테이블을 만듭니다 .
  • ID체크섬finish_at마이그레이션 이름로그roll_back_at시작_에서적용_단계_수
    5f285eeb-3714-461c-bb3a-03a7adad6aad 1beaf4ec9e8cfdc1f fa546aa0b0d94ba2b382293d 7b7237619202f2372c 2021-03-09 14:55:38.712883 20210305110829_first_migration 없는 없는 2021-03-09 14:55:38.542458 1

두 번째 마이그레이션: 새 필드 추가

  1. 스키마에 두 개의 필드를 추가합니다.
  2.  
    model User {
    id Int @id @default(autoincrement())
    name String
    jobTitle String @db.VarChar(100)
    posts Post[]
    profile Profile?
    }
     
    model Post {
    id Int @id @default(autoincrement())
    title String
    published Boolean @default(true)
    content String
    authorId Int
    author User @relation(fields: [authorId], references: [id])
    tags String[]
    categories Category[]
    }
  3. 마이그레이션 생성:_prisma_migrations이제 테이블에 두 개의 항목이 있습니다 .migrations이제 폴더에 두 가지 마이그레이션이 있습니다 .
  4.  
    migrations/
    └─ 20210305110829_first_migration/
    └─ migration.sql
    └─ 20210305120829_add_fields/
    └─ migration.sql
  5. ID체크섬finish_at마이그레이션 이름로그roll_back_at시작_에서적용_단계_수
    5f285eeb-3714-461c-bb3a-03a7adad6aad 1beaf4ec9e8cfdc1ffa 546aa0b0d94ba2b382293d 7b7237619202f2372c 2021-03-09 14:55:38.712883 20210305110829_first_migration 없는 없는 2021-03-09 14:55:38.542458 1
    034e198c-dd9f-482a-afdc-26437708ed1e b12be494d0f81 716d6732ae221b02a65677c6 2aafbb76f6e3fea4929f77f3d 2021-03-09 14:55:38.767893 20210305120829_add_fields 없는 없는 2021-03-09 14:55:38.724587 1
  6.  
    $npx prisma migrate dev --name add-fields

세 번째 마이그레이션: 필드 유형을 호환 가능한 유형으로 변경

  1. name필드를 a로 변경합니다 varchar(50)(기본값은 text).
 
model Category {
id Int @id @default(autoincrement())
name String
name String @db.VarChar(50)
posts Post[]
 
@@unique([name])
}
  1. 마이그레이션 생성:_prisma_migrations이제 테이블에 세 개의 항목이 있습니다 .migrations이제 폴더에 세 가지 마이그레이션이 있습니다 .
  2.  
    migrations/
    └─ 20210305110829_first_migration/
    └─ migration.sql
    └─ 20210305120829_add_fields/
    └─ migration.sql
    └─ 20210308102042_type-change/
    └─ migration.sql
  3. ID체크섬finish_at마이그레이션 이름로그roll_back_at시작_에서적용_단계_수
    5f285eeb-3714-461c-bb3a-03a7adad6aad 1beaf4ec9e8cfdc1ffa 546aa0b0d94ba2b382293d 7b7237619202f2372c 2021-03-09 14:55:38.712883 20210305110829_first_migration 없는 없는 2021-03-09 14:55:38.542458 1
    034e198c-dd9f-482a-afdc-26437708ed1e b12be494d0f81 716d6732ae221b02a65677c6 2aafbb76f6e3fea4929f77f3d 2021-03-09 14:55:38.767893 20210305120829_add_fields 없는 없는 2021-03-09 14:55:38.724587 1
    932e198c-2d9f-182a-afdc-26437708ed1e cd14e494d0f81 216d3732ae221b02a65677c6 fddfbb76f6e3fea4929f77f3d 2021-03-09 14:55:38.767893 20210308102042_type_change 없는 없는 2021-03-09 14:55:38.724587 1
  4.  
    $npx prisma migrate dev --name type-change

고급 시나리오

스키마 변경은 새 필드, 모델 또는 관계 추가와 같이 종종 추가적 입니다. 스키마의 일부를 이동하거나 이름을 바꾸거나 대폭 리팩터링하는 경우 생성된 SQL을 적용하기 전에 기존 데이터를 보존하기 위해 편집해야 할 가능성이 큽니다.

예제는 고급 마이그레이션 시나리오를 참조하세요 .

시드 스크립트 작성

migrate reset개발 환경에서 데이터베이스 를 재설정해야 합니다. 예를 들어 마이그레이션 기록이 다른 브랜치 간에 정기적으로 전환하는 경우 Prisma Migrate는 prisma migrate dev. 시드 스크립트를 사용할 수 있는 경우 Prisma Migrate는 데이터베이스를 재설정한 후 해당 스크립트를 실행합니다.

예제는 데이터베이스 시드를 참조하세요 .

728x90
반응형
Comments