728x90
반응형

예전에 csv로 저장되어 있던 내용을 데이터베이스로 옮기는 작업을 진행했었다.
여기서 회사 정보가 있는데, 이 회사들의 ID(숫자)는 채용 공고, 이미지 등등 다른 정보들과 관계가 있는 상황이었다.
데이터베이스로 옮기면서 id 바꾸게 되면 다른 정보들도 그에 맞춰서 동기화를 해야 하니 번거롭다는 생각이 들었다.
그렇기에 회사 ID를 autoincrement로 만들고 기존 csv의 회사 ID를 그냥 직접 대입하며 테이블에 추가했다.
아래는 당시 코드이다.

스키마
데이터 삽입

이후에 회사 정보를 추가하면 id는 어떻게 되는 걸까?라는 생각이 먼저 들었다.
그때 처음 든 생각은 autoincrement로 설정했으니 1,2,..., 319, 321과 같은 경우라면 알아서 
비어있는 320이나 다음으로 제일 큰 숫자인 322로 채워주지 않을까였다.
하지만 회사를 추가하니 companyId를 2로 삽입하여 중복된 id라고 에러가 나왔다.

autoincrement의 시퀸스가 자동이 아니라 직접 저장한 값들은 기억을 못 해서 생긴 문제였다.
그렇기에 이런 경우에는 아래 코드처럼 autoincrement 시퀸스를 직접 업데이트해줘야 한다.
아래는 postgresql, prisma 코드이다.

  await prisma.$executeRaw`SELECT setval(
    pg_get_serial_sequence('"company"', 'company_id'),
    coalesce(max(company_id) + 1, 1),
    false
  ) FROM "company"`

 

참고: https://github.com/prisma/prisma/discussions/5256

 

Invalid create() Unique constraint failed on the fields: (`id`) · prisma prisma · Discussion #5256

Hello I have this model: model Somename { id Int @id @default(autoincrement()) name String } I get this error when trying to create an entry for the model: Invalid prisma.somename.create() Unique c...

github.com

728x90
반응형

+ Recent posts