如何使用 Prisma 以行数为条件为 Postgres 插入 SQL?
How to do SQL insert for Postgres using Prisma with condition on count of rows?
我正在尝试向数据库中插入一行,前提是 - table 中满足某些条件的行数小于特定阈值,比如 10。例如,在下面的模型中,我不不想让一个项目拥有超过 10 个用户;所以 count(projectId)
应该小于 10:
model User {
id BigInt @id @default(autoincrement())
firstName String @map("first_name")
lastName String @map("last_name")
email String @unique
password String
passwordHash String @map("password_hash")
createdAt DateTime @db.Timestamptz() @default(now()) @map("created_at")
updatedAt DateTime @db.Timestamptz() @updatedAt @map("updated_at")
project Project @relation(fields: [projectId], references: [id])
projectId BigInt? @map("project_id")
@@map("app_user")
}
model Project {
id BigInt @id @default(autoincrement())
name String
users User[]
@@map("project")
}
在一般的SQL世界中,我会依赖于乐观并发控制的事务,然后仅在读取匹配[=13=的行数后尝试插入].由于 Prisma 不提供传统的长 运行ning 交易,我被卡住了。我不能简单地先 运行 计数查询,然后再进行插入,因为它本质上不是原子的。
如何使用 Prisma 处理这种情况?
我正在尝试向数据库中插入一行,前提是 - table 中满足某些条件的行数小于特定阈值,比如 10。例如,在下面的模型中,我不不想让一个项目拥有超过 10 个用户;所以 count(projectId)
应该小于 10:
model User {
id BigInt @id @default(autoincrement())
firstName String @map("first_name")
lastName String @map("last_name")
email String @unique
password String
passwordHash String @map("password_hash")
createdAt DateTime @db.Timestamptz() @default(now()) @map("created_at")
updatedAt DateTime @db.Timestamptz() @updatedAt @map("updated_at")
project Project @relation(fields: [projectId], references: [id])
projectId BigInt? @map("project_id")
@@map("app_user")
}
model Project {
id BigInt @id @default(autoincrement())
name String
users User[]
@@map("project")
}
在一般的SQL世界中,我会依赖于乐观并发控制的事务,然后仅在读取匹配[=13=的行数后尝试插入].由于 Prisma 不提供传统的长 运行ning 交易,我被卡住了。我不能简单地先 运行 计数查询,然后再进行插入,因为它本质上不是原子的。
如何使用 Prisma 处理这种情况?