🐛

【Prisma】autoincrement設定したidカラムでUnique constraint failedが発生する原因と対処法

2024/03/23に公開

はじめに

Prismaを使用していて、autoincrement設定したidカラムでUnique constraint failedエラーに遭遇して、ハマったので、対処法をまとめます。

問題

以下のように登録処理を行うと、1回目の登録処理に失敗して、2回目以降成功する状態。

await prisma.user.create({
    data: {
        name: '山田次郎',
        email: 'jiro@example.com'
        hashedPassword,
    },
});

エラーメッセージ

PrismaClientKnownRequestError: 
    Invalid `prisma.user.create()` invocation:

    Unique constraint failed on the fields: (`id`)

スキーマ

schema.prisma
model User {
  id             Int              @id @default(autoincrement())
  name           String
  email          String           @unique
  hashedPassword String
}

解決方法

原因はseederで初期データ登録時にidを明示的に指定していたことでした。

Prismaは内部的にシーケンスを管理しているため、idを指定せずに@default(autoincrement())に任せるようにしました。

await prisma.user.create({
    data: {
-       id: 1,
        name: '山田太郎',
        email: 'taro@example.com'
        hashedPassword,
    },
});

おわりに

1回目の登録処理には失敗するけど、2回目以降は成功する挙動になっていたので、
「謎だなー」ってなってましたが、原因がわかってスッキリしました。

同じ問題に遭遇した方の助けになれば幸いです。

参考

Discussion