Delete lots of entries results in a timeout - prisma
When I run:
const results = await prisma.result.deleteMany({
where: {
typebotId: 'ckzqqer3j002509l3np5x3v2y',
},
})
It runs forever and then times out. (I'm expecting it to delete more than 6.000 results)
Here is my prisma schema:
model Typebot {
id String #id #default(cuid())
createdAt DateTime #default(now())
updatedAt DateTime #default(now()) #updatedAt
icon String?
name String
publishedTypebotId String?
publishedTypebot PublicTypebot?
results Result[]
folderId String?
folder DashboardFolder? #relation(fields: [folderId], references: [id])
groups Json
variables Json[]
edges Json
theme Json
settings Json
publicId String? #unique
customDomain String? #unique
collaborators CollaboratorsOnTypebots[]
invitations Invitation[]
webhooks Webhook[]
workspaceId String
workspace Workspace #relation(fields: [workspaceId], references: [id], onDelete: Cascade)
}
model Result {
id String #id #default(cuid())
createdAt DateTime #default(now())
updatedAt DateTime #default(now()) #updatedAt
typebotId String
typebot Typebot #relation(fields: [typebotId], references: [id], onDelete: Cascade)
answers Answer[]
variables Json[]
isCompleted Boolean
logs Log[]
}
model Log {
id String #id #default(cuid())
createdAt DateTime #default(now())
resultId String
result Result #relation(fields: [resultId], references: [id], onDelete: Cascade)
status String
description String
details String?
}
model Answer {
createdAt DateTime #default(now())
resultId String
result Result #relation(fields: [resultId], references: [id], onDelete: Cascade)
blockId String
groupId String
variableId String?
content String
##unique([resultId, blockId, groupId])
}
Here are the logs:
prisma:info Starting a postgresql pool with 21 connections in PgBouncer mode.
Query: BEGIN
Params: []
Duration: 10ms
Query: DEALLOCATE ALL
Params: []
Duration: 11ms
Query: SELECT "public"."Result"."id" FROM "public"."Result" WHERE "public"."Result"."typebotId" = $1 OFFSET $2
Params: ["ckzqqer3j002509l3np5x3v2y",0]
Duration: 159ms
Query: SELECT "public"."Result"."id" FROM "public"."Result" WHERE "public"."Result"."typebotId" = $1
Params: ["ckzqqer3j002509l3np5x3v2y"]
Duration: 129ms
Query: DELETE FROM "public"."Result" WHERE "public"."Result"."id" IN ($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47,$48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64,$65,$66,$67,$68,$69,$70,$71,$72,$73,$74,$75,$7 [...] 0","cl4frxblq433409lb3l95czep","cl4frgs4r487909ks862a3vf2","cl4frww25009609mpgbv0ntqf","cl4frgs0u487309ks3ugw514j","cl4frgsvn097909k0epcxy9me","cl4frhil4108309k0pop31n8p","cl4frwwa1313909k0vfb9tpbo","cl4frgx5l282409lbvdk1gwz1","cl4frgzc2100209k0k8ve0471","cl4frx4pi429709lbhpekm640","cl4frhu63294109lbbxsclv2l","cl4frjhk9307309lbm8e02obi","cl4frx5nl643709kst8fmob1e","cl4frx984432009lbmp3sxqd6","cl4frkjiq142909k0n37881vv","cl4frjihk310109lb6tnne9jc","cl4frxffr436209lbkaj3gh9f","cl4frkkd7145209k051m5bflf"]
Duration: 120041ms
Query: ROLLBACK
Params: []
Duration: 11ms
How can I optimize this query?
I also tried:
const results =
await prisma.$queryRaw`DELETE FROM "Result" WHERE "Result"."typebotId"='ckzqqer3j002509l3np5x3v2y'`
It also times out 😔
Related
Multiple relation to the same field prisma postgresql
I want to create this database deisng https://i.stack.imgur.com/2QYip.png I need to make model of Station and TrackSegment (A track segment ties two stations together.) This is my prisma schema but it give me this error "Error validating model 'station': the unique index definitions refers to the field code multiple times. model Station { id Int #id #default(autoincrement()) createdAt DateTime #default(now()) updatedAt DateTime #updatedAt name String code String #unique } model TrackSegment { id Int #id #default(autoincrement()) createdAt DateTime #default(now()) updatedAt DateTime #updatedAt sourceId String destinationId String stationCode Station #relation(fields: [destinationId, sourceId], references: [code, code]) } I imagine this is how the data will look. Station: [ { name: 'kalisetail' code: 'KLS }, { name: 'rogojampi' code: 'RGJ }] then the TrackSegment is id: 1 sourceId: KLS destinationId: RGJ both sourceId and destinationId refer to the same field(code) of model Station
You will need to add a second Station relation on your TrackSegment field to differentiate between the source the destination. model Station { id Int #id #default(autoincrement()) createdAt DateTime #default(now()) updatedAt DateTime #updatedAt name String code String #unique sourceSegments TrackSegment[] #relation("source") destinationSegments TrackSegment[] #relation("destination") } model TrackSegment { id Int #id #default(autoincrement()) createdAt DateTime #default(now()) updatedAt DateTime #updatedAt sourceId String destinationId String sourceStationCode Station #relation(name: "source", fields: [sourceId], references: [code]) destinationStationCode Station #relation(name: "destination", fields: [destinationId], references: [code]) } Notice I have always disambiguated the relations by giving them different names.
prisma nested writes throw unknown args
I have the shorten schema like that: model PATIENT { patient_id Int #id #default(autoincrement()) patient_name String patient_identity_card BigInt #unique password String wallet_id Int? birthday DateTime address String status_id Int gender String #default("Nam") phone String #default("0935438280") current_treatment_place_id Int avatar_url String? treatment_place TREATMENT_PLACE #relation(fields: [current_treatment_place_id], references: [place_id]) status PATIENT_STATUS #relation(fields: [status_id], references: [status_id]) card CART? patient_passive_contact PATIENT_CONTACT[] #relation("ActiveContact_referredToPatient") patient_active_contact PATIENT_CONTACT[] #relation("PassiveContact_referredToPatient") BE_MANAGED_HISTORY BE_MANAGED_HISTORY[] } model BE_MANAGED_HISTORY { place_id Int patient_id Int time DateTime status_id Int status PATIENT_STATUS #relation(fields: [status_id], references: [status_id]) patient PATIENT #relation(fields: [patient_id], references: [patient_id]) place TREATMENT_PLACE #relation(fields: [place_id], references: [place_id]) change_type_id Int change_type CHANGE_MANAGED_HISTORY_TYPE #relation(fields: [change_type_id], references: [type_id]) ##id([place_id, patient_id, time]) } I want to create a BE_MANAGED_HISTORY record and through it create a PATIENT record with needed information. The nested writes below: const res = await prisma.BE_MANAGED_HISTORY.create({ data: { place_id: treatmentPlaceId, time: new Date(startDate), status_id: patientStatus, change_type_id: 1, patient: { create: { patient_name: patientName, gender, birthday: new Date(birthday), patient_identity_card: identity, password: hashedPassword, phone, address, status_id: patientStatus, current_treatment_place_id: treatmentPlaceId, avatar_url: avatarUrl, } } }, }) But prisma throws an error: Unknown arg patient in data.patient for type BE_MANAGED_HISTORYUncheckedCreateInput. Did you mean patient_id? Argument patient_id for data.patient_id is missing. So can I create an beManagedHistory and create an patient inside nested writes?
We have to create a PATIENT record first, and nested in it creating a BE_MANAGED_HISTORY record.
How to make id autoincrement in schema.prisma?
I am writing a postgreSQL database. The ID must be auto-incrementing. model User { id String #id #default(cuid()) name String? email String? #unique emailVerified DateTime? #map("email_verified") image String? createdAt DateTime #default(now()) #map(name: "created_at") updatedAt DateTime #updatedAt #map(name: "updated_at") posts Post[] accounts Account[] sessions Session[] ##map(name: "users") } Result If you write the ID manually, you can enter any value as in the first entry, but autocomplete generates the code as in the second entry. I got the code from the site Vercel.
You need to use autoincrement function. Here's how it would look in User model: model User { id Int #id #default(autoincrement()) name String? email String? #unique emailVerified DateTime? #map("email_verified") image String? createdAt DateTime #default(now()) #map(name: "created_at") updatedAt DateTime #updatedAt #map(name: "updated_at") posts Post[] accounts Account[] sessions Session[] ##map(name: "users") }
One-to-many and may-to-many relation between two prisma model
I am working on a side project and I came to an issue that I'm not sure how to solve. I have created two models, one for User and one for Project. The relation between them is many-to-many, as many users can have many projects, but i would also like to add a createdBy to the Project model, and this should be one-to-one as each project can only have one user who creates it. This is how my models are looking: model User { id String #id #default(cuid()) name String? email String? #unique emailVerified DateTime? image String? createdAt DateTime #default(now()) updatedAt DateTime #updatedAt accounts Account[] sessions Session[] projects Project[] Project Project[] #relation("userId") } model Project { id Int #id #default(autoincrement()) createdAt DateTime #default(now()) name String favourite Boolean #default(false) archived Boolean #default(false) users User[] about String? archivedAt String? deletedAt String? createdBy User #relation("userId", fields: [userId], references: [id]) userId String } The error that is getting from prisma migrate dev is Step 1 Added the required column userId to the Project table without a default value. There are 2 rows in this table, it is not possible to execute this step. Not sure what I am doing wrong as am pretty much a db modeling novice. Any help would be appreciated.
To achieve Many-to-Many with One-To-Many you need to set your schema.prisma file like: model User { id String #id #default(cuid()) name String? email String? #unique emailVerified DateTime? image String? createdAt DateTime #default(now()) updatedAt DateTime #updatedAt projects Project[] userProjects UserProjects[] } model Project { id Int #id #default(autoincrement()) createdAt DateTime #default(now()) name String favourite Boolean #default(false) archived Boolean #default(false) about String? archivedAt String? deletedAt String? createdBy User #relation(fields: [user_id], references: [id]) user_id String projectUsers UserProjects[] } model UserProjects { project Project #relation(fields: [project_id], references: [id]) project_id Int user User #relation(fields: [user_id], references: [id]) user_id String ##id([project_id, user_id]) } It should migrate successfully.
prisma2 how to relate one-to-many and many-to-one?
I need some help to understqnd how to set my data modelisation. What i'm trying to do is : Reference a group ID in User model. A user can only be in one group, this is what i've done below. Reference in Group Model all users that are inside a group. This is what I need help with. model User { id String #id #default(uuid()) email String #unique role Role #default(USER) group Group? #relation(fields: [group_id], references: [id], onDelete: SetNull) group_id String created_at DateTime #default(now()) updated_at DateTime #updatedAt ##map("user") } model Group { id String #id #default(uuid()) name String users User[] created_at DateTime #default(now()) updated_at DateTime #updatedAt deleted Boolean #default(false) ##map("group") } How can I make this list of User when I already have users User[] for the relation in User model ? (BTW i've read the doc but i'm totally lost...)
I think your code is correct, you can use prisma-client to test This is an example of this relation model Agents { id Int #id #default(autoincrement()) #db.UnsignedInt name String? #db.VarChar(255) owner String? #db.VarChar(255) address String? #db.Text lat String? #db.VarChar(10) lng String? #db.VarChar(10) tel String? #db.VarChar(13) mobile String? #db.VarChar(11) workTime String? #db.VarChar(255) province Provinces #relation(fields: [provinceId], references: [id]) provinceId Int #db.UnsignedInt createDateTime DateTime #default(now()) #db.Timestamp(0) updateDateTime DateTime? #db.Timestamp(0) ##index([provinceId], name: "provinceId") ##map(name: "agents") } model Provinces { id Int #id #default(autoincrement()) #db.UnsignedInt name String? #db.VarChar(255) coords String? #db.Text createDateTime DateTime #default(now()) #db.Timestamp(0) updateDateTime DateTime? #db.Timestamp(0) agents Agents[] ##map(name: "provinces") }