99% 에러잡기 시리즈/ORM

[Prisma 99% 에러 잡기] P3018 : A migration failed to apply. |

TLOWAC 2024. 11. 20. 17:15

🔍  에러 및 발생 원인 분석

1) Error 메시지

 


 

2) Error 발생 원인 분석

migration filename           |  20240211055424_update_room_id_type_to_string_uuid

/*
  Warnings:

  - The primary key for the `Room` table will be changed. If it partially fails, the table could be left without primary key constraint.

*/
-- DropForeignKey
ALTER TABLE `Invite` DROP FOREIGN KEY `Invite_roomId_fkey`;

-- DropForeignKey
ALTER TABLE `User` DROP FOREIGN KEY `User_roomId_fkey`;

-- AlterTable
ALTER TABLE `Invite` MODIFY `roomId` VARCHAR(191) NOT NULL;

-- AlterTable
ALTER TABLE `Room` DROP PRIMARY KEY,
    MODIFY `id` VARCHAR(191) NOT NULL,
    ADD PRIMARY KEY (`id`);

-- AlterTable
ALTER TABLE `User` MODIFY `roomId` VARCHAR(191) NOT NULL;

-- AddForeignKey
ALTER TABLE `User` ADD CONSTRAINT `User_roomId_fkey` FOREIGN KEY (`roomId`) REFERENCES `Room`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `Invite` ADD CONSTRAINT `Invite_roomId_fkey` FOREIGN KEY (`roomId`) REFERENCES `Room`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

 

Table[Room] 의 PK 가 기존 number 에서 string ( number -> string ) 으로 변경됨에 따라 해당 작업을 위한 마이그레이션 파일 또한 신규로 생성되었습니다. 하지만, 로컬 환경에서 마이그레이션 후 데이터 확인 과정에서 실반영이 안되는점을 확인하였습니다.

 

← String 타입의 경우 “123” 이 아닌 “ABC” 로 표시 되어야 합니다.

 

 

해당 파트를 제거 후 20240203154156_db_schema_init 마이그레이션 파일에 Table[Room] 의 PK 타입 변환 DDL 을 업데이트 하였으며, 로컬에서 작업한 마이그레이션을 적용하는 과정에서 에러가 발생하였습니다.

 


 

  해결 방법 정리

Prisma 의 마이그레이션 관리 방식은 shadow database 를 사용하기 때문에 기존에 남아 있는 마이그레이션 파일 내역을 제거하고 다시 로컬 마이그레이션을 진행하는 방식으로 문제를 해결하였습니다.

( DEV/PROD 환경에서 이와 같은 방법은 지양 합니다. )

 


 

 

📍마무리하며

prisma migrate failed 과정에서 shadow database 내역을 수정함으로써 resolve 하는 방법을 통해 에러를 해결한 내용을 정리해 보았습니다. 추가로 도움이 될만한 prisma docs 링크를 남겨놓습니다!

 

https://www.prisma.io/docs/orm/prisma-migrate/workflows/patching-and-hotfixing#failed-migration

 

Patching & hotfixing | Prisma Documentation

How to reconcile the migration history after applying a hotfix or patch to a production environment.

www.prisma.io

 

https://www.prisma.io/docs/orm/prisma-migrate/getting-started

 

Getting started with Prisma Migrate | Prisma Documentation

Learn how to migrate your schema in a development environment using Prisma Migrate.

www.prisma.io

 

반응형