🐛
【Prisma】autoincrement設定したidカラムでUnique constraint failedが発生する原因と対処法
はじめに
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