데이터가 있는 테이블에서 unique 관련 마이그레이션 실패 해결

jYur·2023년 2월 2일
0

데이터 두 개 존재

iddocumentIdversion
111
212

현재 [documentId, version] unique

version 제거 및 documentId unique 원함

마이그레이션 적용 결과,
verison 제거 성공, documentId unqiue 실패(중복 데이터 존재)

iddocumentId
11
21

Option 1. 롤백

  • 실패한 마이그레이션 삭제
  • 되돌아가기 위한 sql 생성
    • diff, from DB to migrations
      ; shadow db에 실패한 마이그레이션을 제외한 기존 마이그레이션을 적용한 후, 실패했던 마이그레이션이 일부 적용된 db와 비교.
  • 생성한 sql 실행. 결과: 실패
    • CREATE UNIQUE INDEX `Media_mdmId_version_key` ON `Media`(`mdmId` ASC, `version` ASC);
      version 컬럼을 다시 추가하더라도 데이터는 [documentId, version]이 unique하게 다시 채울 수 없음.

Option 2. 문제 고치고 일부만 적용된 실패한 마이그레이션 마저 적용하기

  • 실패 원인 제거: id가 1인 row 삭제
  • 마저 적용하기 위한 sql 생성
    • DB와 스키마 데이터 모델 diff
  • 생성한 sql 실행
  • 실패한 마이그레이션이 제대로 적용된 것으로 DB의 마이그레이션 테이블에 표시

migrate dev 명령은 로컬에서만 실행하기로 돼 있어서 이것저것 해 주는 게 많다 보니 사용하는 DB 계정에게도 상당한 권한을 부여해야 한다. 동작 방식이 shadow database(Schema)를 추가로 만들어서 비교하는 등 써먹은 후 삭제하고 그런 식이기 때문에, 평소에 사용 중인 DB(Schema)에 대한 권한만 부여하면 에러가 뿜뿜한다.(일단 CREATE, DROP을 global로 주지 않으면 shadow database를 만들고 삭제할 수 없으니 그렇고 그 외에도 최소한 ALTER, REFERENCES, INDEX는 필요)

참고: https://www.prisma.io/docs/guides/database/production-troubleshooting

0개의 댓글