model Comment {
id Int @id @default(autoincrement())
cid String
bid String
author AppProfile @relation(fields: [bid], references: [bid])
comment String
created DateTime @default(now())
}
const results = await prisma.comment.create({
data: {
cid: req.body.cid,
comment: req.body.comment,
bid: appProfile.bid,
},
});
prisma:query INSERT INTO "public"."Comment" ("cid","bid","comment","created") VALUES ($1,$2,$3,$4) RETURNING "public"."Comment"."id"
prisma:query ROLLBACK
error - PrismaClientUnknownRequestError:
Invalid `prisma.comment.create()` invocation:
Error occurred during query execution:
ConnectorError(ConnectorError { user_facing_error: None, kind: QueryError(Error { kind: Db, cause: Some(DbError { severity: "ERROR", parsed_severity: Some(Error), code: SqlState(E22003), message: "integer out of range for type int4", detail: None, hint: None, position: None, where_: None, schema: None, table: None, column: None, datatype: None, constraint: None, file: Some("eval.go"), line: Some(65), routine: Some("init") }) }) })
at RequestHandler.handleRequestError (/Users/jmalicke/Projects/muf/dev/repos/muf/bubbles-serverless/node_modules/@prisma/client/runtime/index.js:34314:13)
at RequestHandler.request (/Users/jmalicke/Projects/muf/dev/repos/muf/bubbles-serverless/node_modules/@prisma/client/runtime/index.js:34293:12)
at async PrismaClient._request (/Users/jmalicke/Projects/muf/dev/repos/muf/bubbles-serverless/node_modules/@prisma/client/runtime/index.js:35273:16)
at async comment (webpack-internal:///(api)/./pages/api/comment/index.ts:26:25) {
clientVersion: '4.6.1',
page: '/api/comment'
}
Это странно, потому что столбец id имеет тип Int и должен автоматически увеличиваться по умолчанию. Сообщение об ошибке жалуется на int4. Если я смотрю в базе данных, единственным столбцом int4 является поле id.
Кажется, ваши пользователи слишком активны, если имеется более 2.147.483.647 идентификаторов комментариев, идентификатор Int достиг максимального значения.
Вы можете преобразовать его в BigInt, например:
id BigInt @id @default(autoincrement())
Но лучше всего использовать uuid, например:
id String @id @unique @default(uuid())
Int max = 2.147.483.647
BigInt max = 9.223.372.036.854.775.807
UUID max = 3.4*10^38 or 340000000000000000000000000000000000000 (thanks to Belayer)
Во-первых, убедитесь, что ваш провайдер в schema.prisma установлен на «cockroachdb», если вы используете CockroachDB.
Для справки, CockroachDB поддерживает автоинкремент только для BigInt , а для Int CockroachDB использует sequence()
К вашему сведению: не то, чтобы это действительно имело значение, но максимальный UUID = ffffffff-ffff-ffff-ffff-ffffffffffff (примерно 3,4 * 10 ^ 38 или 3400000000000000000000000000000000000000000)