Prisma upsert 과정에서의 간단한 트러블슈팅

pengooseDev·2023년 2월 15일
1
post-thumbnail
post-custom-banner

문제점

client.user.upsert({
	where: {
      ...payload,
    },
  	create: {
      //code
    },
  	updata: {
      //code
    }
});

where field에 제공하는 payload가 데이터를 가져오지 못해 Error가 발생했다.

원인

upsert에 제공하는 where 프로퍼티의 payload는 반드시 prisma.schema에서 unique한 field여야 한다.

// unique가 달려있지 않으면 myFiled를 where에게 payload로 넘겨줄 때 error가 발생한다. upsert에는 default로 findUnique가 설정되어있기 때문이다.
myField  String?

해결

간단하다. @unique 옵션을 추가해준다.

myField  String? @unique

2차 문제

분명 prisma schema를 수정했음에도 불구하고 동일한 Error가 발생하고 있었다. 구글링과 프로그램 특성상 Error의 원인은 git과 비슷한 이유일 것이라 추론했다.
local의 prisma.schema는 변했지만, Pscale의 Schema는 변하지 않았다는 것.
쉽게 말해 새로운 Schema를 commit, push를 해주어야 한다는 것이다.

해결

pscale DB connection은 끊어둔 뒤, 아래의 과정을 진행한다.

npx prisma db push

요약

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider     = "mysql"
  url          = env("DATABASE_URL")
  relationMode = "prisma"
}

model User {
  id              Int      @id @default(autoincrement())
  nonUniqueField  Int?     
  uniqueField     String?  @unique
}

nonUniqueField를 upsert의 where payload로 넘겨주면 에러난다. unique한 field가 아니어서 하나의 값만 가져올 수 없
기 때문이다.

post-custom-banner

0개의 댓글