개발/DB

[prisma] npx prisma db push 업데이트에 실패할 때

prpn97 2024. 4. 5. 16:43

발단

  프리즈마에 모델을 세팅하고, DB에 업데이트하는 과정에서 문제가 생겼다. 

아래 스샷대로 나는 분명 user_i에 대해서 외래키를 지정해주지만, 별도로 unique를 설정하지는 않았다.

 

  내가 원하는 것은 유저가 유효하지 않은 상태일 때는 여러 상황이 있고, 각 항목마다 별도로 기록해두고 모든 상태를 해결해야 사용이 가능하도록 해야 하기 때문에 user_id는 중복을 허용해야 한다. 그런데 다른 모델은 당연히 @unique를 지정하지 않는다고 해서 문제가 되지 않았는데, 테스트하는데 중복저장에 unique속성이라는 이유로 저장에 실패했다. 

 

 

그래서 DB에서 확인해보니 user_id에 Unique가 걸려 있음을 확인하고, 내가 실수했나 싶어서 다시 npx prisma db push 명령어로 내가 원하는 모델의 형태를 업데이트했으나, 여전히 같은 증상이 있었다. 그리고 여전히 Unique가 설정되어 있어서 push한 뒤 다시 바로 npx prisma db pull로 가져와봤는데..

 

??????????????

다시 설정되어 있는 모습을 볼 수 있었다.. 나는 분명 @unique를 지우고 push해서 성공했는데 db에 반영되지 않았고, 그렇기 때문에 db의 상태를 가져왔더니 다시 @unique가 박혀있는 것이다. 

해결방법

  간단하다. 근본적인 문제는 DB에 업데이트에 실패한 것이므로 db 자체에서 unique속성을 제거하고 Pull하면 되겠는데, 확실하게 하기 위해서 해당 테이블과 릴레이션을 일단 prisma에서 지워주고 Push해서 테이블을 날린 뒤, 다시 Unique를 지운 상태에서 Push했고, 다행히 제대로 설정이 완료되었다. 아마도 업데이트하는 과정에서 Prisma 내부적으로 캐시같은 부분때문에 반영이 겹쳐지지 않았나 싶다. 

 

 

코멘트

  기본적으로 프리즈마에서 모델을 정의했지만 결국 프리즈마는 db의 세팅을 도와주는 매개일 뿐이지 어떠한 제약에 위배된다는 메세지가 나왔다면 결국 설정이 원하는대로 완료되지 않았다는 것이고, db를 확인해야 한다. 

 

무슨 기능을 사용하든지 원리와 개념을 터득하는게 중요한 것 같다. 

 

728x90